using Application.Abstractions.Data; using Application.Abstractions.Messaging; using Microsoft.EntityFrameworkCore; namespace Application.Features.Api.Note.GetOutbox; internal sealed class Handler(IAppDbContext db) : IQueryHandler { public async Task 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); } }