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 EmailAccountRepository : IEmailAccountRepository { private readonly SqlSugarDbContext _dbContext; protected readonly ILogger _logger; private readonly IMapper _mapper; public EmailAccountRepository(IMapper mapper, SqlSugarDbContext dbContext, ILogger logger) { _mapper = mapper; _dbContext = dbContext; _logger = logger; } /// /// 获取 SqlSugarClient 实例 /// protected SqlSugarClient Db { get { return _dbContext.GetInstance(); } } /// /// 获取默认邮件账户 /// public async Task GetDefaultAccountAsync() { var dbEntity = await Db.Queryable() .Where(e => e.IsDefault && e.IsActive) .FirstAsync(); return dbEntity != null ? _mapper.Map(dbEntity) : null; } /// /// 获取所有启用的邮件账户 /// public async Task> GetActiveAccountsAsync() { var dbEntities = await Db.Queryable() .Where(e => e.IsActive) .ToListAsync(); return _mapper.Map>(dbEntities); } /// /// 异步根据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(EmailAccount entity) { var dbEntity = _mapper.Map(entity); var result = await Db.Insertable(dbEntity) .ExecuteReturnEntityAsync(); return _mapper.Map(result); } /// /// 异步更新一个已存在的实体。 /// public async Task UpdateAsync(EmailAccount entity) { var dbEntity = _mapper.Map(entity); return await Db.Updateable(dbEntity) .ExecuteCommandAsync(); } /// /// 异步根据ID删除一个实体。 /// public async Task DeleteAsync(EmailAccount entity) { var dbEntity = _mapper.Map(entity); return await Db.Deleteable(dbEntity) .ExecuteCommandAsync(); } /// /// 异步批量添加实体。 /// public async Task> AddAsync(List entities) { var dbEntities = _mapper.Map>(entities); var insertedEntities = new List(); // 使用循环逐个插入实体,这样可以确保返回每个插入的实体 foreach (var entity in dbEntities) { var insertedEntity = await Db.Insertable(entity).ExecuteReturnEntityAsync(); insertedEntities.Add(insertedEntity); } return _mapper.Map>(insertedEntities); } /// /// 异步根据实体列表批量删除实体。 /// public async Task DeleteAsync(List entities) { var dbEntities = _mapper.Map>(entities); return await Db.Deleteable(dbEntities) .ExecuteCommandAsync(); } } }