using DMS.Application.DTOs; using DMS.Application.Events; using DMS.Application.Interfaces; using DMS.Application.Interfaces.Database; using DMS.Application.Interfaces.Management; using DMS.Core.Enums; namespace DMS.Application.Services.Management; /// /// 日志管理服务,负责日志相关的业务逻辑。 /// public class LogManagementService : ILogManagementService { private readonly INlogAppService _nlogAppService; private readonly IAppStorageService _appStorageService; /// /// 当日志数据发生变化时触发 /// public event EventHandler OnLogChanged; public LogManagementService(INlogAppService nlogAppService,IAppStorageService appStorageService) { _nlogAppService = nlogAppService; _appStorageService = appStorageService; } /// /// 异步根据ID获取日志DTO。 /// public async Task GetNlogByIdAsync(int id) { return await _nlogAppService.GetLogByIdAsync(id); } /// /// 异步获取所有日志DTO列表。 /// public async Task> GetAllNlogsAsync() { return await _nlogAppService.GetAllLogsAsync(); } /// /// 异步获取指定数量的最新日志DTO列表。 /// public async Task> GetLatestNlogsAsync(int count) { return await _nlogAppService.GetLatestLogsAsync(count); } /// /// 异步清空所有日志。 /// public async Task ClearAllNlogsAsync() { await _nlogAppService.ClearAllLogsAsync(); } /// /// 在内存中添加日志 /// public void AddNlogToMemory(NlogDto nlogDto) { if (_appStorageService.Nlogs.TryAdd(nlogDto.Id, nlogDto)) { OnLogChanged?.Invoke(this,new NlogChangedEventArgs(DataChangeType.Added, nlogDto)); } } /// /// 在内存中更新日志 /// public void UpdateNlogInMemory(NlogDto nlogDto) { _appStorageService.Nlogs.AddOrUpdate(nlogDto.Id, nlogDto, (key, oldValue) => nlogDto); OnLogChanged?.Invoke(this,new NlogChangedEventArgs(DataChangeType.Updated, nlogDto)); } /// /// 在内存中删除日志 /// public void RemoveNlogFromMemory(int nlogId) { if (_appStorageService.Nlogs.TryRemove(nlogId, out var nlogDto)) { OnLogChanged?.Invoke(this,new NlogChangedEventArgs(DataChangeType.Deleted, nlogDto)); } } /// /// 异步加载所有日志数据到内存中。 /// public async Task LoadAllNlogsAsync(int count) { _appStorageService.Nlogs.Clear(); var nlogDtos = await _nlogAppService.GetLatestLogsAsync(count); // 加载日志数据到内存 foreach (var nlogDto in nlogDtos) { _appStorageService.Nlogs.TryAdd(nlogDto.Id, nlogDto); } } }