using AutoMapper;
using DMS.Application.DTOs;
using DMS.Application.Interfaces;
using DMS.Application.Interfaces.Database;
using DMS.Core.Interfaces;
namespace DMS.Application.Services.Database;
///
/// 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();
}
///
/// 异步清空所有Nlog日志。
///
public async Task ClearAllLogsAsync()
{
// 这里需要实现清空日志的逻辑
// 暂时只清空UI上的日志列表
// 实际实现可能需要在 INlogRepository 中添加相应的方法
await _repoManager.Nlogs.DeleteAllAsync();
}
// 可以在这里实现 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);
}
*/
}