39 lines
1.4 KiB
C#
39 lines
1.4 KiB
C#
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<ProjectBoardHub> _hubContext;
|
||
|
||
public SignalRBoardNotificationPublisher(IHubContext<ProjectBoardHub> 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);
|
||
}
|
||
} |