public async Task <ServiceProviderResponse> CreateOrUpdateTemplateAsync( [FromHeader(Constant.OperationTrackingIdHeader)] string requestId, [FromHeader] string account, [FromBody] TemplateCreateOrUpdateRequest request) { Validator.ArgumentNotNull(request, nameof(request)); Validator.ArgumentNotNullOrEmpty(request.Name, nameof(request.Name)); Validator.ArgumentNotNullOrEmpty(request.SenderAlias, nameof(request.SenderAlias)); Validator.ArgumentNotNullOrEmpty(request.HtmlMsg, nameof(request.HtmlMsg)); if (request.SenderAddrID != null) { Validator.ArgumentValidGuid(request.SenderAddrID, nameof(request.SenderAddrID)); } var currentAccount = await EnsureAccount(account, requestId); var template = new Template { Name = request.Name, EngagementAccount = currentAccount.EngagementAccount, SenderId = new Guid(request.SenderAddrID), SenderAlias = request.SenderAlias, Subject = request.Subject, HtmlMsg = request.HtmlMsg, EnableUnSubscribe = request.EnableUnSubscribe, State = ResourceState.Active, }; var templateResult = await this.engine.CreateOrUpdateTemplateAsync(template, requestId); return(ServiceProviderResponse.CreateJsonResponse(HttpStatusCode.OK, templateResult)); }
public async Task <ServiceProviderResponse> CreateOrUpdateTemplateAsync( [FromHeader(Constant.OperationTrackingIdHeader)] string requestId, [FromHeader] string account, [FromBody] TemplateCreateOrUpdateRequest request) { await ValidateAccount(account); Validator.ArgumentNotNull(request, nameof(request)); Validator.ArgumentNotNullOrEmpty(request.Name, request.Name); Validator.ArgumentNotNullOrEmpty(request.Signature, request.Signature); Validator.IsTrue <ArgumentException>(request.Category != MessageCategory.Invalid, nameof(request.Category), "Invalid message category."); ValidateTemplateBody(request.Body, request.Category); var signature = await this.store.GetSignatureAsync(account, request.Signature); Validator.IsTrue <ResourceNotFoundException>(signature != null, nameof(signature), "The signature '{0}' does not exist.", request.Signature); Validator.IsTrue <ArgumentException>(signature.State == ResourceState.Active, nameof(signature), "The signature '{0}' is not active.", request.Signature); ValidateSignagureForMessageCategory(signature, request.Category); var template = new Template { EngagementAccount = account, Name = request.Name, Signature = request.Signature, Category = request.Category, Body = request.Body, State = ResourceState.Pending }; template = await this.store.CreateOrUpdateTemplateAsync(template); // Send ops mail if (this.mailHelper != null) { SmsProviderEventSource.Current.Info(requestId, this, nameof(this.CreateOrUpdateTemplateAsync), OperationStates.Starting, $"Sending ops mail. account={account} template={template.Name}"); var channelType = SmsConstant.MessageSendChannelMappings[template.Category]; var assignment = await this.credentialManager.GetCredentialAssignmentByAccountAsync(account, channelType); this.mailHelper.SendMailOnTemplateCreatedOrUpdated(template, assignment != null ? new CredentialAssignment(assignment) : null, requestId); SmsProviderEventSource.Current.Info(requestId, this, nameof(this.CreateOrUpdateTemplateAsync), OperationStates.Succeeded, $"Sent ops mail. account={account} template={template.Name}"); } else { SmsProviderEventSource.Current.Warning(requestId, this, nameof(this.CreateOrUpdateTemplateAsync), OperationStates.Dropped, $"Cannot send ops email because of mailing is not ready. account={account} template={template.Name}"); } return(ServiceProviderResponse.CreateJsonResponse(HttpStatusCode.OK, template)); }