using Application.Abstractions.Data; using Application.Abstractions.Messaging; using SharedKernel.Results; using Microsoft.EntityFrameworkCore; namespace Application.Features.Api.MyPage.GetLoginLogs; internal sealed class Handler(IAppDbContext db) : IQueryHandler> { public async Task> Handle(Query request, CancellationToken ct) { var page = request.Page < 1 ? 1 : request.Page; var pageSize = request.PageSize is < 1 or > 50 ? 20 : request.PageSize; var query = db.MemberLoginLog .AsNoTracking() .Where(l => l.MemberID == request.MemberID) .OrderByDescending(l => l.CreatedAt); var totalCount = await query.CountAsync(ct); var items = await query .Skip((page - 1) * pageSize) .Take(pageSize) .Select(l => new LoginLogItem( l.ID, l.Success, l.Account, l.Reason, l.IpAddress, l.UserAgent, l.CreatedAt )) .ToListAsync(ct); return Result.Success(new Response(items, totalCount, page, pageSize)); } }