Handler.cs 1.2 KB

1234567891011121314151617181920212223242526272829
  1. using Application.Abstractions.Messaging;
  2. using Application.Abstractions.Data;
  3. using SharedKernel.Results;
  4. using Microsoft.EntityFrameworkCore;
  5. namespace Application.Features.Admin.Member.Wallet.List.Get;
  6. public sealed class Handler(IAppDbContext db) : IQueryHandler<Query, Result<Response>>
  7. {
  8. public async Task<Result<Response>> Handle(Query request, CancellationToken ct)
  9. {
  10. var wallet = await db.Wallet.AsNoTracking().Include(x => x.Member).ThenInclude(m => m.MemberGrade).Include(x => x.Balances).FirstOrDefaultAsync(x => x.ID == request.Id, ct);
  11. if (wallet is null)
  12. {
  13. return Result.Failure<Response>(Error.NotFound("Wallet.NotFound", "지갑을 찾을 수 없습니다."));
  14. }
  15. return Result.Success(new Response
  16. {
  17. WalletID = wallet.ID,
  18. Balance = (long)wallet.GetTotalAvailable().Value,
  19. MemberID = wallet.MemberID,
  20. MemberEmail = wallet.Member.Email,
  21. GradeName = wallet.Member.MemberGrade?.KorName,
  22. Balances = [..wallet.Balances.OrderBy(c => c.Type).Select(c => new Response.BalanceItem(c.Type, (long)c.Amount.Value))]
  23. });
  24. }
  25. }