Angular应用复杂日期预订校验:时段冲突与同用户封禁规则实现
预订功能校验逻辑开发要求与现存问题
需落地的完整校验规则
- 通用基础校验:任意用户提交的预订申请,不得占用其他用户已经成功预订的日期时段
- 特殊封禁校验:针对已完成过预订的用户,执行额外限制——封禁周期的计算值为
members.length - 1(例:团队总人数为5时,单用户对应的封禁周期为4个自然单位),处于封禁周期内的用户,无法再次提交与自身已有预订存在日期重叠的申请;该限制仅对预订本人生效,不约束其他无重叠预订记录的用户 - 校验精度要求:日期匹配判断必须完整覆盖年、月、日三个时间维度,不得出现维度漏判。
当前实现存在的核心缺陷
项目目前基于TypeScript开发,已定义包含Entrymodel、Startdate、Enddate结构的预订数据模型,在createEntry方法中完成了入参日期的基础解析逻辑,但现有校验代码存在两类会直接导致功能失效的问题:
- 遍历逻辑流程错误:遍历已有预订记录做匹配判断时,会提前触发循环return,哪怕目标时段和所有已有记录都不存在重叠,也会被误判为冲突、拦截合法申请
- 重叠判定精度不足:无法正确识别跨月、长跨度区间的时段重叠场景。比如测试复现的多段完全重叠案例:Bob预订2021/1/5-2021/1/10、Bill预订2021/1/4-2021/1/9、Susan预订2021/1/1-2021/1/12,现有逻辑完全拦截不到这类冲突,所有非法预订都会被直接写入仅存储起止日期的Firestore记录,最终导致重叠时段可被任意用户反复抢占。
已开展的优化尝试
开发人员后续尝试通过logentry方法新增Inbetween结构,将预订区间覆盖的全部中间日期存储为inbet字段,但目前尚未明确如何基于该结构完成准确的冲突校验链路。
目前项目配套有可复现所有问题的在线调试环境,同时附Firestore实际存储的数据结构截图作为开发参考。
内容的提问来源于stack exchange,提问作者Someguy
相关产品推荐
相关产品推荐

