| 1234567891011121314151617181920212223242526272829 |
- using Application.Abstractions.Messaging;
- using Application.Abstractions.Data;
- using SharedKernel.Results;
- using Microsoft.EntityFrameworkCore;
- namespace Application.Features.Admin.Member.Wallet.List.Get;
- public sealed class Handler(IAppDbContext db) : IQueryHandler<Query, Result<Response>>
- {
- public async Task<Result<Response>> Handle(Query request, CancellationToken ct)
- {
- 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);
- if (wallet is null)
- {
- return Result.Failure<Response>(Error.NotFound("Wallet.NotFound", "지갑을 찾을 수 없습니다."));
- }
- return Result.Success(new Response
- {
- WalletID = wallet.ID,
- Balance = (long)wallet.GetTotalAvailable().Value,
- MemberID = wallet.MemberID,
- MemberEmail = wallet.Member.Email,
- GradeName = wallet.Member.MemberGrade?.KorName,
- Balances = [..wallet.Balances.OrderBy(c => c.Type).Select(c => new Response.BalanceItem(c.Type, (long)c.Amount.Value))]
- });
- }
- }
|