Handler.cs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. using Application.Abstractions.Data;
  2. using Application.Abstractions.Messaging;
  3. using Microsoft.EntityFrameworkCore;
  4. using SharedKernel.Results;
  5. namespace Application.Features.Admin.Store.GameCatalog.GetByGame;
  6. internal sealed class Handler(IAppDbContext db) : IQueryHandler<Query, Result<Response>>
  7. {
  8. public async Task<Result<Response>> Handle(Query request, CancellationToken ct)
  9. {
  10. var game = await db.Game
  11. .AsNoTracking()
  12. .Where(c => c.ID == request.GameID)
  13. .Select(c => new
  14. {
  15. c.ID,
  16. c.KorName,
  17. c.Code,
  18. c.ApiCommissionRate
  19. })
  20. .FirstOrDefaultAsync(ct);
  21. if (game is null)
  22. {
  23. return Result.Failure<Response>(Error.NotFound("Game.NotFound", "게임을 찾을 수 없습니다."));
  24. }
  25. var list = await db.GameProductCatalog
  26. .AsNoTracking()
  27. .Where(c => c.GameID == request.GameID)
  28. .OrderBy(c => c.ProductID)
  29. .Select(c => new Response.Row(c.ID, c.ProductID, c.Price, c.IsActive, c.CreatedAt, c.UpdatedAt))
  30. .ToListAsync(ct);
  31. return Result.Success(new Response(game.ID, game.KorName, game.Code, game.ApiCommissionRate, list));
  32. }
  33. }