You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
적립 포인트 회수 + 사용(차감) 포인트 반환: adjust_points(db, order.user_id, -(order.points_earned - order.points_used))
쿠폰 원상복구: order.user_coupon_id가 있으면 restore_coupon() 호출
Order.status를 CANCELLED로 전이 — 이때는 [BE2-E] 주문 관리자 화면 (목록/상태 전이) #24(Module E)의 상태 전이 검증을 거치지 않고 order_dao.update_order_status를 직접 호출 (완료된 주문도 환불 가능해야 함)
이미 환불된 결제 재환불 시도 시 409 (중복 환불로 포인트 이중 회수되는 사고 방지)
current_points가 음수로 내려가는 것은 이번 스코프에서 허용 (하한 체크 없음)
완료 기준
환불 처리 후 Payment.status=REFUNDED, Order.status=CANCELLED 동시 반영
환불 후 고객 포인트가 "적립 회수 + 사용분 반환" 정확히 반영
쿠폰을 쓴 주문 환불 시 해당 쿠폰이 재사용 가능 상태로 복구
이미 환불된 결제 재환불 시도 시 409
참고
docs/백엔드_기능명세.md Module D. 선행 조건: #21(Module C의 adjust_points/mark_coupon_used/restore_coupon), #24(Module E의 update_order_status). 문서상으로도 실제 착수 순서가 가장 나중인 모듈.
작업 내용
docs/백엔드_기능명세.mdModule D 섹션 참고.신규 파일:
backend/api/admin/payments.py.backend/dao/payment_dao.py에get_payment_by_order_id,list_payments,mark_refunded추가.backend/schemas/payment_schemas.py에PaymentAdminOut추가.사용자측 결제(
POST /api/payments)는 이미 완료되어 있으므로 건드리지 않는다.API
/api/admin/payments(쿼리: status, date_from, date_to)list[PaymentAdminOut]/api/admin/payments/{id}PaymentAdminOut/api/admin/payments/{id}/refund{reason}PaymentAdminOut★ 환불 시 반드시 함께 처리 (포인트·쿠폰 원상복구)
adjust_points(db, order.user_id, -(order.points_earned - order.points_used))order.user_coupon_id가 있으면restore_coupon()호출Order.status를CANCELLED로 전이 — 이때는 [BE2-E] 주문 관리자 화면 (목록/상태 전이) #24(Module E)의 상태 전이 검증을 거치지 않고order_dao.update_order_status를 직접 호출 (완료된 주문도 환불 가능해야 함)current_points가 음수로 내려가는 것은 이번 스코프에서 허용 (하한 체크 없음)완료 기준
Payment.status=REFUNDED,Order.status=CANCELLED동시 반영참고
docs/백엔드_기능명세.mdModule D. 선행 조건: #21(Module C의 adjust_points/mark_coupon_used/restore_coupon),#24(Module E의 update_order_status). 문서상으로도 실제 착수 순서가 가장 나중인 모듈.