skymoon-13

导航

团队项目冲刺4--Day4

团队项目冲刺4--Day4

一、一、今日站立式会议照片

image

二、昨日已完成内容

成员 完成内容 Work Item
宋可月 预约 API 数据结构设计 T-10
齐畅 场馆详情页与后台接口联通 T-8
颜宏宇 完成数据库驱动版本场馆 API T-6
戴清 完成预约表结构 + 唯一约束 T-9
缪子睿 场馆 API 测试执行完毕 T-20
曹伟斌 邮件发送模块研究完成 T-19
赖彦彤 场馆 UI 页面优化 T-7

三、今日计划工作

成员 今日任务 Work Item
宋可月 实现预约创建 API + 冲突检测 T-10
齐畅 创建预约页面 UI 实现 T-13
颜宏宇 预约查询 API T-14
戴清 数据库索引优化、唯一索引验证 T-9
缪子睿 预约模块测试用例初版 T-20
曹伟斌 邮件发送绑定预约成功流程 T-19
赖彦彤 预约页面 UI 联调 T-13

四、今日遇到的困难

1️⃣ 冲突检测逻辑复杂度远超预期(宋可月)
预约冲突需要同时满足:
同一场馆
同一天
时间段交叉就算冲突(即便不是完全重叠)
必须支持判断:
A.start < B.end AND B.start < A.end
已成功加入 SQLAlchemy 查询。

2️⃣ 数据库唯一约束需要考虑时间段组合(戴清)
SQLAlchemy 不支持 Time 类型的组合索引自动比较,
但 MySQL / SQLite 都支持。
已测试成功。

3️⃣ 前端时间选择器与后端 Time 格式不统一(齐畅)
前端是 "09:00" 字符串
后端需要 datetime.time 对象
解决:后端统一用 "HH:MM" 字符串解析

4️⃣ 邮件模板需要补充预约详情(曹伟斌)
例如:
场馆名称
日期
时间段
费用

五、燃尽图

image

六、新增代码

  1. routes/reservation.py(核心:预约创建 + 冲突检测)
from flask import Blueprint, request
from datetime import datetime, time
from flask_jwt_extended import jwt_required, get_jwt_identity
from extensions import db
from models import Reservation, Venue

reservation_bp = Blueprint("reservation", __name__)

def parse_time(tstr):
    # "09:00" → time(9, 0)
    return datetime.strptime(tstr, "%H:%M").time()


@reservation_bp.post("/")
@jwt_required()
def create_reservation():
    uid = get_jwt_identity()["id"]
    data = request.json

    venue_id = data.get("venue_id")
    date_str = data.get("date")
    start = parse_time(data.get("start"))
    end = parse_time(data.get("end"))

    date_obj = datetime.strptime(date_str, "%Y-%m-%d").date()

    # 查询冲突预约
    conflict = Reservation.query.filter(
        Reservation.venue_id == venue_id,
        Reservation.date == date_obj,
        Reservation.start_time < end,
        Reservation.end_time > start
    ).first()

    if conflict:
        return {"msg": "Time slot already booked"}, 400

    venue = Venue.query.get_or_404(venue_id)

    # 简单计费逻辑(按小时)
    duration_hours = (datetime.combine(date_obj, end) -
                      datetime.combine(date_obj, start)).seconds / 3600

    price = duration_hours * venue.price_student

    reservation = Reservation(
        user_id=uid,
        venue_id=venue_id,
        date=date_obj,
        start_time=start,
        end_time=end,
        price=price
    )

    db.session.add(reservation)
    db.session.commit()

    return {
        "msg": "Reservation created",
        "reservation_id": reservation.id,
        "price": price
    }, 200

七、每日总结

宋可月: 预约冲突逻辑终于写完,系统跑顺了!

齐畅: 页面逻辑已经清楚,准备接入真实 API。

颜宏宇: 查询 API 基本成型。

戴清: 表结构成功支撑预约逻辑,满意。

缪子睿: 预约的测试点比预想多,会继续补充。

曹伟斌: 邮件整合环节明天尝试跑通。

赖彦彤: 前端预定页面布局越来越合理了。

posted on 2025-12-03 09:34  桜井朋子  阅读(0)  评论(0)    收藏  举报