using MediatR; using Microsoft.Extensions.Logging; using ColaFlow.Modules.ProjectManagement.Domain.Events; using ColaFlow.Modules.ProjectManagement.Domain.Repositories; using ColaFlow.Modules.ProjectManagement.Application.Services; namespace ColaFlow.Modules.ProjectManagement.Application.EventHandlers; /// /// Handler for ProjectUpdatedEvent - sends SignalR notification /// public class ProjectUpdatedEventHandler : INotificationHandler { private readonly IProjectNotificationService _notificationService; private readonly IProjectRepository _projectRepository; private readonly ILogger _logger; public ProjectUpdatedEventHandler( IProjectNotificationService notificationService, IProjectRepository projectRepository, ILogger logger) { _notificationService = notificationService; _projectRepository = projectRepository; _logger = logger; } public async Task Handle(ProjectUpdatedEvent notification, CancellationToken cancellationToken) { _logger.LogInformation("Handling ProjectUpdatedEvent for project {ProjectId}", notification.ProjectId); // Get full project to obtain TenantId var project = await _projectRepository.GetByIdAsync(notification.ProjectId, cancellationToken); if (project == null) { _logger.LogWarning("Project {ProjectId} not found for update notification", notification.ProjectId); return; } var projectData = new { Id = notification.ProjectId.Value, Name = notification.Name, Description = notification.Description, UpdatedAt = DateTime.UtcNow }; await _notificationService.NotifyProjectUpdated( project.TenantId.Value, notification.ProjectId.Value, projectData); _logger.LogInformation("SignalR notification sent for updated project {ProjectId}", notification.ProjectId); } }