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 });
}
}