Handler.cs 1.3 KB

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