Skip to content

[BE2-C] 주문 처리 로직 보완 (포인트·쿠폰·상태 반영) #21

Description

@yesung05

작업 내용

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_orderOrderOut.items에 항상 빈 배열을 반환한다. 이미 조회해둔 order_with_items
OrderItemOut으로 변환해 채운다.

2. 포인트 미반영

points_earned/points_to_use를 계산만 하고 User.current_points에 반영하지 않는다.
user_dao.pyadjust_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.pyget_user_coupon_by_code, mark_coupon_used,
restore_coupon 추가.

4. 주문 상태 반영

GET /api/orders/{id}의 하드코딩된 "completed"를 실제 order.status로 교체.

5. 응답 스키마

OrderOutstatus: 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/백엔드_기능명세.md Module C. 선행 조건: #20(마이그레이션).

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingphase2Phase 2: 백엔드 로직 보완 + 관리자 화면routerFastAPI 라우터

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions