示例#1
0
        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));
        }
示例#2
0
        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));
        }