using Application.Abstractions.Hub; using Microsoft.AspNetCore.SignalR; namespace Infrastructure.Hubs; /// /// 크루원 변경 broadcast 구현체. /// FeedBroadcaster 와 동일하게 IHubContext 미주입(테스트/디자인 타임) 시 silent no-op. /// internal sealed class CrewHubBroadcaster(IHubContext? hub = null) : ICrewHubBroadcaster { public Task BroadcastMemberChangeAsync(int crewID, string kind, object data, CancellationToken ct = default) { if (hub is null || crewID <= 0 || string.IsNullOrWhiteSpace(kind)) { return Task.CompletedTask; } return hub.Clients .Group($"crew:{crewID}") .ReceiveCrewMemberChange(new { kind, data }); } }