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> { public async Task> 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); } }