using GozareshgirProgramManager.Application._Common.Constants; using GozareshgirProgramManager.Application.Interfaces; using GozareshgirProgramManager.Domain.ProjectAgg.Enums; using Microsoft.AspNetCore.SignalR; using ServiceHost.Hubs.ProgramManager; namespace ServiceHost.Notifications.ProgramManager; public class SignalRBoardNotificationPublisher:IBoardNotificationPublisher { private readonly IHubContext _hubContext; public SignalRBoardNotificationPublisher(IHubContext hubContext) { _hubContext = hubContext; } public Task SendProjectStatusChanged(long userId, TaskSectionStatus oldStatus, TaskSectionStatus newStatus, Guid sectionId) { var payload = new { UserId= userId, OldStatus = oldStatus, NewStatus = newStatus, SectionId = sectionId }; // گروه task-specific (برای همه assigneeهای واقعی) var taskGroup = $"pm.task:{sectionId}"; // گروه permission-based (مثلاً برای Admin ها) var permissionGroup = $"pm.perm:{ProgramManagerPermissionCode.Board.All.ViewAll}"; // ارسال به هر دو گروه؛ SignalR خودش duplicate connection رو هندل می‌کنه return _hubContext.Clients.Groups(taskGroup, permissionGroup) .SendAsync("ReceiveProjectStatusChanged", payload); } }