using AutoMapper; using DMS.Application.DTOs; using DMS.Application.Interfaces; using DMS.Core.Interfaces; namespace DMS.Application.Services; /// /// Nlog日志应用服务,负责处理Nlog日志相关的业务逻辑。 /// 实现 接口。 /// public class NlogAppService : INlogAppService { private readonly IRepositoryManager _repoManager; private readonly IMapper _mapper; /// /// 构造函数,通过依赖注入获取仓储管理器和AutoMapper实例。 /// /// 仓储管理器实例。 /// AutoMapper 实例。 public NlogAppService(IRepositoryManager repoManager, IMapper mapper) { _repoManager = repoManager; _mapper = mapper; } /// /// 异步根据ID获取Nlog日志数据传输对象。 /// /// 日志ID。 /// Nlog日志数据传输对象。 public async Task GetLogByIdAsync(int id) { var log = await _repoManager.Nlogs.GetByIdAsync(id); return _mapper.Map(log); } /// /// 异步获取所有Nlog日志数据传输对象列表。 /// /// Nlog日志数据传输对象列表。 public async Task> GetAllLogsAsync() { var logs = await _repoManager.Nlogs.GetAllAsync(); return _mapper.Map>(logs); } /// /// 异步获取指定数量的最新Nlog日志数据传输对象列表。 /// /// 要获取的日志条目数量。 /// 最新的Nlog日志数据传输对象列表。 public async Task> GetLatestLogsAsync(int count) { // 注意:这里的实现假设仓储层或数据库支持按时间倒序排列并取前N条。 // 如果 BaseRepository 没有提供这种能力,可能需要直接访问 DbNlog 实体。 // 例如:var dbLogs = await _repoManager.Nlogs.Db.Queryable().OrderByDescending(n => n.LogTime).Take(count).ToListAsync(); // var logs = _mapper.Map>(dbLogs); // return _mapper.Map>(logs); // 为简化起见,这里先调用 GetAll 然后在内存中排序和截取(仅适用于日志量不大的情况)。 // 生产环境中建议优化数据库查询。 var allLogs = await GetAllLogsAsync(); return allLogs.OrderByDescending(l => l.LogTime).Take(count).ToList(); } // 可以在这里实现 INlogAppService 接口中定义的其他方法 // 例如: /* public async Task> GetLogsByLevelAsync(string level) { // 假设 INlogRepository 有 GetLogsByLevelAsync 方法 var logs = await _repoManager.Nlogs.GetLogsByLevelAsync(level); return _mapper.Map>(logs); } public async Task> GetLogsByDateRangeAsync(DateTime startDate, DateTime endDate) { var logs = await _repoManager.Nlogs.GetLogsByDateRangeAsync(startDate, endDate); return _mapper.Map>(logs); } public async Task> SearchLogsAsync(string searchTerm) { var logs = await _repoManager.Nlogs.SearchLogsAsync(searchTerm); return _mapper.Map>(logs); } */ }