using AutoMapper; using DMS.Core.Interfaces.Repositories; using DMS.Core.Models; using DMS.Infrastructure.Data; using DMS.Infrastructure.Entities; using Microsoft.Extensions.Logging; using SqlSugar; namespace DMS.Infrastructure.Repositories { /// /// 邮件日志仓储实现 /// public class EmailLogRepository : IEmailLogRepository { private readonly SqlSugarDbContext _dbContext; protected readonly ILogger _logger; private readonly IMapper _mapper; public EmailLogRepository(IMapper mapper, SqlSugarDbContext dbContext, ILogger logger) { _mapper = mapper; _dbContext = dbContext; _logger = logger; } /// /// 获取 SqlSugarClient 实例 /// protected SqlSugarClient Db { get { return _dbContext.GetInstance(); } } /// /// 异步根据ID获取单个实体。 /// public async Task GetByIdAsync(int id) { var dbEntity = await Db.Queryable() .In(id) .FirstAsync(); return dbEntity != null ? _mapper.Map(dbEntity) : null; } /// /// 异步获取所有实体。 /// public async Task> GetAllAsync() { var dbEntities = await Db.Queryable() .ToListAsync(); return _mapper.Map>(dbEntities); } /// /// 异步添加一个新实体。 /// public async Task AddAsync(EmailLog entity) { var dbEntity = _mapper.Map(entity); var result = await Db.Insertable(dbEntity) .ExecuteReturnEntityAsync(); return _mapper.Map(result); } /// /// 异步更新一个已存在的实体。 /// public async Task UpdateAsync(EmailLog entity) { var dbEntity = _mapper.Map(entity); return await Db.Updateable(dbEntity) .ExecuteCommandAsync(); } /// /// 异步根据ID删除一个实体。 /// public async Task DeleteAsync(EmailLog entity) { var dbEntity = _mapper.Map(entity); return await Db.Deleteable(dbEntity) .ExecuteCommandAsync(); } /// /// 异步根据ID删除一个实体。 /// public async Task DeleteByIdAsync(int id) { return await Db.Deleteable() .In(id) .ExecuteCommandAsync(); } /// /// 异步根据ID列表批量删除实体。 /// public async Task DeleteByIdsAsync(List ids) { return await Db.Deleteable() .In(ids) .ExecuteCommandAsync(); } /// /// 从数据库获取数据。 /// public async Task> TakeAsync(int number) { var dbEntities = await Db.Queryable() .Take(number) .ToListAsync(); return _mapper.Map>(dbEntities); } /// /// 异步批量添加实体。 /// public async Task AddBatchAsync(List entities) { var dbEntities = _mapper.Map>(entities); var result = await Db.Insertable(dbEntities) .ExecuteCommandAsync(); return result > 0; } /// /// 根据邮件消息ID获取日志 /// public async Task> GetByEmailMessageIdAsync(int emailMessageId) { var dbEntities = await Db.Queryable() .Where(e => e.EmailMessageId == emailMessageId) .ToListAsync(); return _mapper.Map>(dbEntities); } /// /// 根据日期范围获取日志 /// public async Task> GetByDateRangeAsync(DateTime startDate, DateTime endDate) { var dbEntities = await Db.Queryable() .Where(e => e.CreatedAt >= startDate && e.CreatedAt <= endDate) .ToListAsync(); return _mapper.Map>(dbEntities); } } }