Handler.cs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536
  1. using Application.Abstractions.Messaging;
  2. using Application.Abstractions.Data;
  3. using SharedKernel;
  4. using SharedKernel.Extensions;
  5. using Microsoft.EntityFrameworkCore;
  6. using Microsoft.Extensions.Options;
  7. namespace Application.Features.Document.Search
  8. {
  9. public sealed class Handler(IAppDbContext db, IOptions<AppSettings> settings) : IQueryHandler<Query, Response>
  10. {
  11. public async Task<Response> Handle(Query request, CancellationToken ct)
  12. {
  13. var total = await db.Document.CountAsync(ct);
  14. var list = await db.Document.AsNoTracking().OrderByDescending(c => c.ID).Skip((request.Page - 1) * request.PerPage).Take(request.PerPage).ToListAsync(ct);
  15. return new Response
  16. {
  17. Total = total,
  18. List = [..list.Select((c, i) => new Response.Item
  19. {
  20. Num = total - ((request.Page - 1) * request.PerPage) - i,
  21. ID = c.ID,
  22. Link = $"{settings.Value.App.FrontURL}/docs/{c.Code}",
  23. Code = c.Code,
  24. Subject = c.Subject,
  25. Content = c.Content,
  26. Views = c.Views.ToString("N0"),
  27. IsActive = c.IsActive ? 'Y' : 'N',
  28. UpdatedAt = c.UpdatedAt.GetDateAt() ?? "-",
  29. CreatedAt = c.CreatedAt.GetDateAt()
  30. })]
  31. };
  32. }
  33. }
  34. }