Handler.cs 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. using Application.Abstractions.Data;
  2. using Application.Abstractions.Hub;
  3. using Application.Abstractions.Messaging;
  4. using SharedKernel;
  5. using SharedKernel.Results;
  6. using Microsoft.EntityFrameworkCore;
  7. namespace Application.Features.Api.Crew.UpdateMember;
  8. internal sealed class Handler(
  9. IAppDbContext db,
  10. ICrewHubBroadcaster crewBroadcaster
  11. ) : ICommandHandler<Command, Result>
  12. {
  13. public async Task<Result> Handle(Command request, CancellationToken ct)
  14. {
  15. var member = await db.CrewMember
  16. .FirstOrDefaultAsync(m => m.ID == request.CrewMemberID, ct);
  17. if (member is null)
  18. {
  19. return Result.Failure(Error.NotFound("Crew.MemberNotFound", "크루원을 찾을 수 없습니다."));
  20. }
  21. member.Update(request.Nickname, request.Role, request.SortOrder, request.IsActive);
  22. await db.SaveChangesAsync(ct);
  23. // 운영자 그룹에 변경 broadcast
  24. await crewBroadcaster.BroadcastMemberChangeAsync(
  25. crewID: member.CrewID,
  26. kind: "updated",
  27. data: new
  28. {
  29. crewMemberID = member.ID,
  30. memberID = member.MemberID
  31. },
  32. ct: ct
  33. );
  34. return Result.Success();
  35. }
  36. }