Handler.cs 1.1 KB

123456789101112131415161718192021222324252627282930313233
  1. using Application.Abstractions.Data;
  2. using Application.Abstractions.Messaging;
  3. using Microsoft.EntityFrameworkCore;
  4. namespace Application.Features.Api.Crew.GetCrewMembers;
  5. internal sealed class Handler(IAppDbContext db) : IQueryHandler<Query, Response>
  6. {
  7. public async Task<Response> Handle(Query request, CancellationToken ct)
  8. {
  9. var crew = await db.Crew.AsNoTracking()
  10. .FirstOrDefaultAsync(c => c.ID == request.CrewID, ct);
  11. if (crew is null)
  12. {
  13. throw new KeyNotFoundException("크루를 찾을 수 없습니다.");
  14. }
  15. var list = await db.CrewMember.AsNoTracking()
  16. .Where(m => m.CrewID == request.CrewID)
  17. .OrderBy(m => m.SortOrder)
  18. .ThenBy(m => m.JoinedAt)
  19. .Select(m => new CrewMemberItem(
  20. m.ID, m.MemberID, m.ChannelID, m.Nickname, m.Role,
  21. m.SortOrder, m.IsActive, m.JoinedAt,
  22. m.Member != null ? m.Member.Thumb : null,
  23. m.Channel != null ? m.Channel.Name : null
  24. ))
  25. .ToListAsync(ct);
  26. return new Response(list);
  27. }
  28. }