using Application.Abstractions.Data; using Application.Abstractions.Messaging; using Microsoft.EntityFrameworkCore; using SharedKernel.Results; namespace Application.Features.Api.Note.DeleteNote; internal sealed class Handler(IAppDbContext db) : ICommandHandler { public async Task Handle(Command r, CancellationToken ct) { // 받은쪽지 또는 보낸쪽지 둘 다 처리 — 본인이 receiver 면 DeleteByReceiver, sender 면 DeleteBySender var note = await db.Note .Where(n => n.ID == r.NoteID && ( (n.ReceiverMemberID == r.CurrentMemberID && !n.IsDeletedByReceiver) || (n.SenderMemberID == r.CurrentMemberID && !n.IsDeletedBySender) )) .FirstOrDefaultAsync(ct); if (note is null) { return Result.Failure(Error.NotFound("Note.NotFound", "쪽지를 찾을 수 없습니다.")); } if (note.ReceiverMemberID == r.CurrentMemberID && !note.IsDeletedByReceiver) { note.DeleteByReceiver(); } else if (note.SenderMemberID == r.CurrentMemberID && !note.IsDeletedBySender) { note.DeleteBySender(); } await db.SaveChangesAsync(ct); return Result.Success(); } }