Handler.cs 1.0 KB

123456789101112131415161718192021222324252627282930
  1. using Application.Abstractions.Data;
  2. using Application.Abstractions.Messaging;
  3. using Microsoft.EntityFrameworkCore;
  4. using SharedKernel.Results;
  5. namespace Application.Features.Api.Store.Games.Browse;
  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 query = db.Game.AsNoTracking().Where(g => g.IsActive);
  11. if (!string.IsNullOrWhiteSpace(request.Keyword))
  12. {
  13. var keyword = request.Keyword.Trim();
  14. query = query.Where(g => g.KorName.Contains(keyword) || (g.EngName != null && g.EngName.Contains(keyword)));
  15. }
  16. query = request.Sort switch
  17. {
  18. "name" => query.OrderBy(g => g.KorName),
  19. _ => query.OrderByDescending(g => g.CreatedAt)
  20. };
  21. var games = await query.Select(g => new GameRow(g.ID, g.KorName, g.EngName, g.Thumbnail, g.CreatedAt)).ToListAsync(ct);
  22. return new Response(games);
  23. }
  24. }