Handler.cs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. using Application.Abstractions.Data;
  2. using Application.Abstractions.Messaging;
  3. using Microsoft.EntityFrameworkCore;
  4. using SharedKernel.Results;
  5. namespace Application.Features.Api.Note.DeleteNote;
  6. internal sealed class Handler(IAppDbContext db) : ICommandHandler<Command, Result>
  7. {
  8. public async Task<Result> Handle(Command r, CancellationToken ct)
  9. {
  10. // 받은쪽지 또는 보낸쪽지 둘 다 처리 — 본인이 receiver 면 DeleteByReceiver, sender 면 DeleteBySender
  11. var note = await db.Note
  12. .Where(n => n.ID == r.NoteID && (
  13. (n.ReceiverMemberID == r.CurrentMemberID && !n.IsDeletedByReceiver) ||
  14. (n.SenderMemberID == r.CurrentMemberID && !n.IsDeletedBySender)
  15. ))
  16. .FirstOrDefaultAsync(ct);
  17. if (note is null)
  18. {
  19. return Result.Failure(Error.NotFound("Note.NotFound", "쪽지를 찾을 수 없습니다."));
  20. }
  21. if (note.ReceiverMemberID == r.CurrentMemberID && !note.IsDeletedByReceiver)
  22. {
  23. note.DeleteByReceiver();
  24. }
  25. else if (note.SenderMemberID == r.CurrentMemberID && !note.IsDeletedBySender)
  26. {
  27. note.DeleteBySender();
  28. }
  29. await db.SaveChangesAsync(ct);
  30. return Result.Success();
  31. }
  32. }