| 1234567891011121314151617181920212223242526272829303132 |
- using Application.Abstractions.Data;
- using Application.Abstractions.Messaging;
- using Microsoft.EntityFrameworkCore;
- using SharedKernel.Results;
- using OrderRefundEntity = Domain.Entities.Store.OrderRefund;
- namespace Application.Features.Admin.Store.Order.RequestRefund;
- public sealed class Handler(IAppDbContext db) : ICommandHandler<Command, Result<int>>
- {
- public async Task<Result<int>> Handle(Command request, CancellationToken ct)
- {
- var order = await db.Order.FirstOrDefaultAsync(o => o.ID == request.OrderID, ct);
- if (order is null)
- {
- return Result.Failure<int>(Error.NotFound("Order.NotFound", "주문을 찾을 수 없습니다."));
- }
- if (request.Amount <= 0 || request.Amount > order.TotalAmount)
- {
- return Result.Failure<int>(Error.Problem("Refund.InvalidAmount", $"환불 금액은 1 ~ {order.TotalAmount:N0}원 사이여야 합니다."));
- }
- var refund = OrderRefundEntity.Create(request.OrderID, request.Type, request.ReasonType, request.Amount, request.Reason);
- db.OrderRefund.Add(refund);
- await db.SaveChangesAsync(ct);
- return Result.Success(refund.ID);
- }
- }
|