using AutoMapper; using DMS.Application.DTOs; using DMS.Application.Interfaces; using DMS.Core.Interfaces.Repositories; using DMS.Core.Interfaces.Services; using DMS.Core.Models; namespace DMS.Application.Services { /// /// 邮件应用服务实现 /// 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; } } }