Handler.cs 1.3 KB

12345678910111213141516171819202122232425262728293031323334
  1. using Application.Abstractions.Data;
  2. using Application.Abstractions.Messaging;
  3. using Microsoft.EntityFrameworkCore;
  4. namespace Application.Features.Api.Note.GetOutbox;
  5. internal sealed class Handler(IAppDbContext db) : IQueryHandler<Query, Response>
  6. {
  7. public async Task<Response> Handle(Query request, CancellationToken ct)
  8. {
  9. // 시스템 발송(SenderMemberID == 0) 은 보낸 쪽지함에서 제외
  10. var query = db.Note.AsNoTracking()
  11. .Where(n => n.SenderMemberID == request.MemberID && !n.IsDeletedBySender && !n.IsSystem);
  12. var total = await query.CountAsync(ct);
  13. var list = await query
  14. .OrderByDescending(n => n.CreatedAt)
  15. .Skip((request.Page - 1) * request.PerPage)
  16. .Take(request.PerPage)
  17. .Select(n => new NoteItem(
  18. n.ID,
  19. n.ReceiverMemberID,
  20. n.Receiver != null ? n.Receiver.Name : null,
  21. n.Receiver != null ? n.Receiver.SID : null,
  22. n.Receiver != null && n.Receiver.Channel != null ? n.Receiver.Channel.Name : null,
  23. n.Receiver != null && n.Receiver.Channel != null ? n.Receiver.Channel.Handle : null,
  24. n.Title, n.IsRead, n.CreatedAt
  25. ))
  26. .ToListAsync(ct);
  27. return new Response(total, list);
  28. }
  29. }