Files
DMS/DMS.Application/Services/Database/NlogAppService.cs
2025-09-16 12:29:09 +08:00

102 lines
3.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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