namespace TaxBaik.Web.Services; /// /// Notification service for real-time admin updates /// SOLID: Single Responsibility - Event notification only /// Uses Blazor Server's built-in SignalR for real-time communication /// public interface INotificationService { event Func? OnInquiryStatusChanged; event Func? OnInquiryCreated; event Func? OnClientCreated; event Func? OnAnnouncementPublished; event Func? OnFilingCompleted; Task TriggerInquiryStatusChanged(int inquiryId, string status); Task TriggerInquiryCreated(int inquiryId, string name); Task TriggerClientCreated(int clientId, string name); Task TriggerAnnouncementPublished(int announcementId, string title); Task TriggerFilingCompleted(int filingId, string filingType); } public class NotificationService : INotificationService { private readonly ILogger _logger; public NotificationService(ILogger logger) { _logger = logger; } public event Func? OnInquiryStatusChanged; public event Func? OnInquiryCreated; public event Func? OnClientCreated; public event Func? OnAnnouncementPublished; public event Func? OnFilingCompleted; public async Task TriggerInquiryStatusChanged(int inquiryId, string status) { _logger.LogInformation($"Inquiry {inquiryId} status changed to {status}"); if (OnInquiryStatusChanged != null) await OnInquiryStatusChanged(inquiryId, status); } public async Task TriggerInquiryCreated(int inquiryId, string name) { _logger.LogInformation($"New inquiry {inquiryId} from {name}"); if (OnInquiryCreated != null) await OnInquiryCreated(inquiryId, name); } public async Task TriggerClientCreated(int clientId, string name) { _logger.LogInformation($"New client {clientId}: {name}"); if (OnClientCreated != null) await OnClientCreated(clientId, name); } public async Task TriggerAnnouncementPublished(int announcementId, string title) { _logger.LogInformation($"Announcement {announcementId} published: {title}"); if (OnAnnouncementPublished != null) await OnAnnouncementPublished(announcementId, title); } public async Task TriggerFilingCompleted(int filingId, string filingType) { _logger.LogInformation($"Filing {filingId} ({filingType}) completed"); if (OnFilingCompleted != null) await OnFilingCompleted(filingId, filingType); } }