| 12345678910111213141516171819202122232425262728 |
- using Application.Abstractions.Messaging;
- using Domain.Entities.Store.ValueObject;
- using SharedKernel.Results;
- namespace Application.Features.Admin.Store.Order.RequestCouponsRefund;
- /// <summary>
- /// 쿠폰 단위 일괄 환불 요청 등록.
- ///
- /// 동작:
- /// 1. CouponCode 별 OrderRefundItem 1행씩 생성 (PostRefundAction 명시)
- /// 2. OrderRefund 1행 생성 — Amount = Σ OrderItem.UnitPrice (선택된 쿠폰 분)
- /// 3. Status=Requested 로 시작. 실제 환불은 별도 ProcessRefund 호출
- ///
- /// 검증:
- /// - 모든 CouponCodeID 가 OrderItem 의 MemberInventory 에 존재
- /// - PostRefundAction=Restore 인데 CouponCode 가 Used 면 거부 (RestoreToAvailable 가 throw 함)
- /// - 이미 다른 OrderRefundItem 에 등록된 CouponCodeID 거부 (unique index 위반 사전 차단)
- /// </summary>
- /// <summary>환불 요청에 포함할 개별 쿠폰 + 후처리.</summary>
- public sealed record CouponRefundLine(int OrderItemID, int CouponCodeID, CouponPostRefundAction PostRefundAction);
- public sealed record Command(
- int OrderID,
- IReadOnlyList<CouponRefundLine> Lines,
- string Reason,
- RefundReasonType ReasonType = RefundReasonType.Other
- ) : ICommand<Result<int>>;
|