| 12345678910111213141516171819202122232425262728293031323334 |
- using Application.Abstractions.Data;
- using Application.Abstractions.Messaging;
- using Microsoft.EntityFrameworkCore;
- namespace Application.Features.Api.Note.GetOutbox;
- internal sealed class Handler(IAppDbContext db) : IQueryHandler<Query, Response>
- {
- public async Task<Response> Handle(Query request, CancellationToken ct)
- {
- // 시스템 발송(SenderMemberID == 0) 은 보낸 쪽지함에서 제외
- var query = db.Note.AsNoTracking()
- .Where(n => n.SenderMemberID == request.MemberID && !n.IsDeletedBySender && !n.IsSystem);
- var total = await query.CountAsync(ct);
- var list = await query
- .OrderByDescending(n => n.CreatedAt)
- .Skip((request.Page - 1) * request.PerPage)
- .Take(request.PerPage)
- .Select(n => new NoteItem(
- n.ID,
- n.ReceiverMemberID,
- n.Receiver != null ? n.Receiver.Name : null,
- n.Receiver != null ? n.Receiver.SID : null,
- n.Receiver != null && n.Receiver.Channel != null ? n.Receiver.Channel.Name : null,
- n.Receiver != null && n.Receiver.Channel != null ? n.Receiver.Channel.Handle : null,
- n.Title, n.IsRead, n.CreatedAt
- ))
- .ToListAsync(ct);
- return new Response(total, list);
- }
- }
|