| 123456789101112131415161718192021222324252627282930 |
- using Application.Abstractions.Data;
- using Application.Abstractions.Messaging;
- using Microsoft.EntityFrameworkCore;
- using SharedKernel.Results;
- namespace Application.Features.Api.Store.Games.Browse;
- internal sealed class Handler(IAppDbContext db) : IQueryHandler<Query, Result<Response>>
- {
- public async Task<Result<Response>> Handle(Query request, CancellationToken ct)
- {
- var query = db.Game.AsNoTracking().Where(g => g.IsActive);
- if (!string.IsNullOrWhiteSpace(request.Keyword))
- {
- var keyword = request.Keyword.Trim();
- query = query.Where(g => g.KorName.Contains(keyword) || (g.EngName != null && g.EngName.Contains(keyword)));
- }
- query = request.Sort switch
- {
- "name" => query.OrderBy(g => g.KorName),
- _ => query.OrderByDescending(g => g.CreatedAt)
- };
- var games = await query.Select(g => new GameRow(g.ID, g.KorName, g.EngName, g.Thumbnail, g.CreatedAt)).ToListAsync(ct);
- return new Response(games);
- }
- }
|