Handler.cs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. using SharedKernel.Extensions;
  2. using Application.Abstractions.Data;
  3. using MediatR;
  4. using Microsoft.EntityFrameworkCore;
  5. namespace Application.Features.Member.EmailChangeLog.Search;
  6. public sealed class Handler(IAppDbContext db) : IRequestHandler<Query, Response>
  7. {
  8. public async Task<Response> Handle(Query request, CancellationToken ct)
  9. {
  10. var query = db.MemberEmailChangeLog
  11. .AsNoTracking()
  12. .Include(x => x.Member)
  13. .AsQueryable();
  14. if (request.MemberId.HasValue)
  15. {
  16. query = query.Where(x => x.MemberID == request.MemberId.Value);
  17. }
  18. var total = await query.CountAsync(ct);
  19. var skip = (request.PageNum - 1) * request.PerPage;
  20. var list = await query
  21. .OrderByDescending(x => x.ID)
  22. .Skip(skip)
  23. .Take(request.PerPage)
  24. .Select(x => new
  25. {
  26. x.ID,
  27. x.MemberID,
  28. MemberName = x.Member != null ? x.Member.Name : null,
  29. x.BeforeEmail,
  30. x.AfterEmail,
  31. x.IpAddress,
  32. x.CreatedAt
  33. })
  34. .ToListAsync(ct);
  35. var rows = list
  36. .Select((x, idx) => new Response.Row
  37. {
  38. Num = total - skip - idx,
  39. ID = x.ID,
  40. MemberID = x.MemberID,
  41. MemberName = x.MemberName,
  42. BeforeEmail = x.BeforeEmail,
  43. AfterEmail = x.AfterEmail,
  44. IpAddress = x.IpAddress,
  45. CreatedAt = x.CreatedAt.GetDateAt()
  46. })
  47. .ToList();
  48. return new Response
  49. {
  50. Total = total,
  51. List = rows
  52. };
  53. }
  54. }