using SharedKernel.Extensions; using Application.Abstractions.Data; using MediatR; using Microsoft.EntityFrameworkCore; namespace Application.Features.Member.EmailChangeLog.Search; public sealed class Handler(IAppDbContext db) : IRequestHandler { public async Task Handle(Query request, CancellationToken ct) { var query = db.MemberEmailChangeLog .AsNoTracking() .Include(x => x.Member) .AsQueryable(); if (request.MemberId.HasValue) { query = query.Where(x => x.MemberID == request.MemberId.Value); } var total = await query.CountAsync(ct); var skip = (request.PageNum - 1) * request.PerPage; var list = await query .OrderByDescending(x => x.ID) .Skip(skip) .Take(request.PerPage) .Select(x => new { x.ID, x.MemberID, MemberName = x.Member != null ? x.Member.Name : null, x.BeforeEmail, x.AfterEmail, x.IpAddress, x.CreatedAt }) .ToListAsync(ct); var rows = list .Select((x, idx) => new Response.Row { Num = total - skip - idx, ID = x.ID, MemberID = x.MemberID, MemberName = x.MemberName, BeforeEmail = x.BeforeEmail, AfterEmail = x.AfterEmail, IpAddress = x.IpAddress, CreatedAt = x.CreatedAt.GetDateAt() }) .ToList(); return new Response { Total = total, List = rows }; } }