| 123456789101112131415161718192021222324252627282930313233343536373839404142 |
- using Application.Abstractions.Data;
- using Application.Abstractions.Hub;
- using Application.Abstractions.Messaging;
- using SharedKernel;
- using SharedKernel.Results;
- using Microsoft.EntityFrameworkCore;
- namespace Application.Features.Api.Crew.UpdateMember;
- internal sealed class Handler(
- IAppDbContext db,
- ICrewHubBroadcaster crewBroadcaster
- ) : ICommandHandler<Command, Result>
- {
- public async Task<Result> Handle(Command request, CancellationToken ct)
- {
- var member = await db.CrewMember
- .FirstOrDefaultAsync(m => m.ID == request.CrewMemberID, ct);
- if (member is null)
- {
- return Result.Failure(Error.NotFound("Crew.MemberNotFound", "크루원을 찾을 수 없습니다."));
- }
- member.Update(request.Nickname, request.Role, request.SortOrder, request.IsActive);
- await db.SaveChangesAsync(ct);
- // 운영자 그룹에 변경 broadcast
- await crewBroadcaster.BroadcastMemberChangeAsync(
- crewID: member.CrewID,
- kind: "updated",
- data: new
- {
- crewMemberID = member.ID,
- memberID = member.MemberID
- },
- ct: ct
- );
- return Result.Success();
- }
- }
|