Handler.cs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. using Application.Abstractions.Data;
  2. using Application.Abstractions.Messaging;
  3. using Microsoft.EntityFrameworkCore;
  4. namespace Application.Features.Api.Crew.GetConsentInfo;
  5. internal sealed class Handler(IAppDbContext db) : IQueryHandler<Query, Response>
  6. {
  7. public async Task<Response> Handle(Query request, CancellationToken ct)
  8. {
  9. var session = await db.CrewSession.AsNoTracking()
  10. .FirstOrDefaultAsync(s => s.ID == request.CrewSessionID, ct);
  11. if (session is null)
  12. {
  13. throw new KeyNotFoundException("세션을 찾을 수 없습니다.");
  14. }
  15. var crew = await db.Crew.AsNoTracking()
  16. .FirstOrDefaultAsync(c => c.ID == session.CrewID, ct);
  17. // 현재 사용자의 크루원 정보
  18. var crewMember = await db.CrewMember.AsNoTracking()
  19. .FirstOrDefaultAsync(m => m.CrewID == session.CrewID && m.MemberID == request.MemberID, ct);
  20. if (crewMember is null)
  21. {
  22. throw new KeyNotFoundException("크루원 정보를 찾을 수 없습니다.");
  23. }
  24. var consent = await db.CrewSessionConsent.AsNoTracking()
  25. .FirstOrDefaultAsync(c => c.CrewSessionID == request.CrewSessionID && c.CrewMemberID == crewMember.ID, ct);
  26. return new Response(
  27. session.ID,
  28. session.Title,
  29. crew?.Name ?? "",
  30. consent?.IsConsented ?? false,
  31. crewMember.ID
  32. );
  33. }
  34. }