작업 내용
docs/백엔드_기능명세.md Module C 섹션 참고. 일반 사용자 흐름에서 이미 매출 데이터 정합성에
영향을 주는 버그이므로 관리자 화면 작업보다 먼저 처리한다.
대상 파일: backend/api/order.py, backend/dao/order_dao.py, backend/dao/user_dao.py,
backend/schemas/order_schemas.py
1. 주문 항목 직렬화 누락
create_order가 OrderOut.items에 항상 빈 배열을 반환한다. 이미 조회해둔 order_with_items를
OrderItemOut으로 변환해 채운다.
2. 포인트 미반영
points_earned/points_to_use를 계산만 하고 User.current_points에 반영하지 않는다.
user_dao.py에 adjust_points(db, user_id, delta) 추가 후 주문 생성 시
adjust_points(db, user.id, points_earned - points_to_use) 호출.
3. 쿠폰 적용 로직 미구현 (# TODO 방치)
body.coupon_code + body.phone이 있으면 회원의 미사용 user_coupons를 조회해 검증 →
discount_amount 계산 → mark_coupon_used 호출 → Order.user_coupon_id에 저장
(환불 시 복구를 위해 필수). user_dao.py에 get_user_coupon_by_code, mark_coupon_used,
restore_coupon 추가.
4. 주문 상태 반영
GET /api/orders/{id}의 하드코딩된 "completed"를 실제 order.status로 교체.
5. 응답 스키마
OrderOut에 status: str 필드 추가.
완료 기준
참고
docs/백엔드_기능명세.md Module C. 선행 조건: #20(마이그레이션).
작업 내용
docs/백엔드_기능명세.mdModule C 섹션 참고. 일반 사용자 흐름에서 이미 매출 데이터 정합성에영향을 주는 버그이므로 관리자 화면 작업보다 먼저 처리한다.
대상 파일:
backend/api/order.py,backend/dao/order_dao.py,backend/dao/user_dao.py,backend/schemas/order_schemas.py1. 주문 항목 직렬화 누락
create_order가OrderOut.items에 항상 빈 배열을 반환한다. 이미 조회해둔order_with_items를OrderItemOut으로 변환해 채운다.2. 포인트 미반영
points_earned/points_to_use를 계산만 하고User.current_points에 반영하지 않는다.user_dao.py에adjust_points(db, user_id, delta)추가 후 주문 생성 시adjust_points(db, user.id, points_earned - points_to_use)호출.3. 쿠폰 적용 로직 미구현 (
# TODO방치)body.coupon_code+body.phone이 있으면 회원의 미사용user_coupons를 조회해 검증 →discount_amount계산 →mark_coupon_used호출 →Order.user_coupon_id에 저장(환불 시 복구를 위해 필수).
user_dao.py에get_user_coupon_by_code,mark_coupon_used,restore_coupon추가.4. 주문 상태 반영
GET /api/orders/{id}의 하드코딩된"completed"를 실제order.status로 교체.5. 응답 스키마
OrderOut에status: str필드 추가.완료 기준
POST /api/orders응답의items가 실제 담긴 메뉴 목록과 일치GET /api/user/points/{phone}의current_points가 적립/차감 정확히 반영coupon_code로 주문 시discount_amount정확히 계산,Order.user_coupon_id저장,같은 쿠폰 재사용 시 400
GET /api/orders/{id}가 실제 진행 상태 반환참고
docs/백엔드_기능명세.mdModule C. 선행 조건: #20(마이그레이션).