using HrynCo.DAL.Abstract; using HrynCo.NotificationService.DAL.Abstract.Repositories; using HrynCo.NotificationService.DAL.Abstract.Templates; using HrynCo.NotificationService.Services.Core; using HrynCo.NotificationService.Services.Logging; using static HrynCo.NotificationService.Services.Core.ServiceResultHelper; namespace HrynCo.NotificationService.Services.EmailTemplates.Create; internal sealed class CreateEmailTemplateHandler : RequestHandler> { private readonly IEmailTemplateRepository _templates; public CreateEmailTemplateHandler( IContextualSerilogLogger logger, IUnitOfWork unitOfWork, IEmailTemplateRepository templates) : base(logger, unitOfWork) { _templates = templates; } protected override async Task> DoOnHandle( CreateEmailTemplateCommand request, CancellationToken cancellationToken) { var existing = await _templates.GetAsync( request.ServiceName, request.Key, request.LanguageCode, cancellationToken); if (existing is not null) return Failure("Template already exists.", ServiceErrorCode.Conflict); var template = new EmailTemplate { ServiceName = request.ServiceName, Key = request.Key, LanguageCode = request.LanguageCode, Subject = request.Subject, HtmlBody = request.HtmlBody, TextBody = request.TextBody, Variables = request.Variables }; await _templates.AddAsync(template, cancellationToken); return Success(template.Id); } }