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();
}
///
/// 异步根据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 insertedEntities = new List();
// 使用循环逐个插入实体,这样可以确保返回每个插入的实体
foreach (var entity in dbEntities)
{
var insertedEntity = await Db.Insertable(entity).ExecuteReturnEntityAsync();
insertedEntities.Add(insertedEntity);
}
return _mapper.Map>(insertedEntities);
}
}
}