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 { public async Task 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(); } }