using AutoMapper;
using DMS.Application.DTOs;
using DMS.Application.Interfaces;
using DMS.Application.Interfaces.Database;
using DMS.Core.Interfaces.Repositories;
using DMS.Core.Interfaces.Services;
using DMS.Core.Models;
namespace DMS.Application.Services.Database
{
///
/// 邮件应用服务实现
///
public class EmailAppService : IEmailAppService
{
private readonly IEmailAccountRepository _emailAccountRepository;
private readonly IEmailTemplateRepository _emailTemplateRepository;
private readonly IEmailMessageRepository _emailMessageRepository;
private readonly IEmailService _emailService;
private readonly IMapper _mapper;
public EmailAppService(
IEmailAccountRepository emailAccountRepository,
IEmailTemplateRepository emailTemplateRepository,
IEmailMessageRepository emailMessageRepository,
IEmailService emailService,
IMapper mapper)
{
_emailAccountRepository = emailAccountRepository;
_emailTemplateRepository = emailTemplateRepository;
_emailMessageRepository = emailMessageRepository;
_emailService = emailService;
_mapper = mapper;
}
///
/// 获取所有邮件账户
///
public async Task> GetAllEmailAccountsAsync()
{
var accounts = await _emailAccountRepository.GetAllAsync();
return _mapper.Map>(accounts);
}
///
/// 根据ID获取邮件账户
///
public async Task GetEmailAccountByIdAsync(int id)
{
var account = await _emailAccountRepository.GetByIdAsync(id);
return _mapper.Map(account);
}
///
/// 创建邮件账户
///
public async Task CreateEmailAccountAsync(CreateEmailAccountRequest request)
{
var account = _mapper.Map(request);
var createdAccount = await _emailAccountRepository.AddAsync(account);
return _mapper.Map(createdAccount);
}
///
/// 更新邮件账户
///
public async Task UpdateEmailAccountAsync(int id, CreateEmailAccountRequest request)
{
var existingAccount = await _emailAccountRepository.GetByIdAsync(id);
if (existingAccount == null)
throw new ArgumentException($"未找到ID为 {id} 的邮件账户");
_mapper.Map(request, existingAccount);
existingAccount.UpdatedAt = DateTime.Now;
var updatedAccount = await _emailAccountRepository.UpdateAsync(existingAccount);
return _mapper.Map(existingAccount);
}
///
/// 删除邮件账户
///
public async Task DeleteEmailAccountAsync(int id)
{
var account = await _emailAccountRepository.GetByIdAsync(id);
if (account == null)
return false;
await _emailAccountRepository.DeleteAsync(account);
return true;
}
///
/// 测试邮件账户连接
///
public async Task TestEmailAccountAsync(int id)
{
var account = await _emailAccountRepository.GetByIdAsync(id);
if (account == null)
return false;
return await _emailService.TestConnectionAsync(account);
}
///
/// 发送邮件
///
public async Task SendEmailAsync(SendEmailRequest request)
{
var account = await _emailAccountRepository.GetByIdAsync(request.EmailAccountId);
if (account == null)
throw new ArgumentException($"未找到ID为 {request.EmailAccountId} 的邮件账户");
var message = _mapper.Map(request);
message.From = account.EmailAddress;
return await _emailService.SendEmailAsync(message, account);
}
///
/// 获取所有邮件模板
///
public async Task> GetAllEmailTemplatesAsync()
{
var templates = await _emailTemplateRepository.GetAllAsync();
return _mapper.Map>(templates);
}
///
/// 根据ID获取邮件模板
///
public async Task GetEmailTemplateByIdAsync(int id)
{
var template = await _emailTemplateRepository.GetByIdAsync(id);
return _mapper.Map(template);
}
///
/// 根据代码获取邮件模板
///
public async Task GetEmailTemplateByCodeAsync(string code)
{
var template = await _emailTemplateRepository.GetByCodeAsync(code);
return _mapper.Map(template);
}
///
/// 创建邮件模板
///
public async Task CreateEmailTemplateAsync(EmailTemplateDto templateDto)
{
var template = _mapper.Map(templateDto);
var createdTemplate = await _emailTemplateRepository.AddAsync(template);
return _mapper.Map(createdTemplate);
}
///
/// 更新邮件模板
///
public async Task UpdateEmailTemplateAsync(int id, EmailTemplateDto templateDto)
{
var existingTemplate = await _emailTemplateRepository.GetByIdAsync(id);
if (existingTemplate == null)
throw new ArgumentException($"未找到ID为 {id} 的邮件模板");
_mapper.Map(templateDto, existingTemplate);
existingTemplate.UpdatedAt = DateTime.Now;
var updatedTemplate = await _emailTemplateRepository.UpdateAsync(existingTemplate);
return _mapper.Map(existingTemplate);
}
///
/// 删除邮件模板
///
public async Task DeleteEmailTemplateAsync(int id)
{
var template = await _emailTemplateRepository.GetByIdAsync(id);
if (template == null)
return false;
await _emailTemplateRepository.DeleteAsync(template);
return true;
}
}
}