Пример #1
0
        public async Task <IActionResult> SendEmail(NewEmailInDto newMailIn)
        {
            var newMailResult = await MailService.CreateMail(newMailIn);

            switch (newMailResult)
            {
            case BadRequestTypedResult <bool> badRequestTypedResult:
                ModelState.AddModelError(badRequestTypedResult.Key, badRequestTypedResult.ErrorMessage);
                return(ValidationProblem(ModelState));

            case FailedTypedResult <bool> failedTypedResult:
                return(Problem(failedTypedResult.Error.ToString(), statusCode: StatusCodes.Status500InternalServerError,
                               title: failedTypedResult.Error.Message));

            case SuccessfulTypedResult <bool> _:
                return(NoContent());

            default:
                throw new ArgumentOutOfRangeException(nameof(newMailResult));
            }
        }
Пример #2
0
        public async Task <IActionResult> Send([FromRoute, ObjectIdValidation] string templateId, SendInDto sendIn)
        {
            var foundTemplateResult = await _templateService.GetLatestTemplateRevision(ObjectId.Parse(templateId));

            TemplateRevisionEntity foundTemplateEntity;

            switch (foundTemplateResult)
            {
            case BadRequestTypedResult <TemplateRevisionEntity> badRequestTypedResult:
                ModelState.AddModelError(badRequestTypedResult.Key, badRequestTypedResult.ErrorMessage);
                return(ValidationProblem(ModelState));

            case FailedTypedResult <TemplateRevisionEntity> failedTypedResult:
                return(Problem(failedTypedResult.Error.ToString(), statusCode: StatusCodes.Status500InternalServerError,
                               title: failedTypedResult.Error.Message));

            case NotFoundTypedResult <TemplateRevisionEntity> _:
                return(NotFound());

            case SuccessfulTypedResult <TemplateRevisionEntity> successfulTypedResult:
                foundTemplateEntity = successfulTypedResult.Value;
                break;

            default:
            {
                var argException = new ArgumentOutOfRangeException(nameof(foundTemplateResult));
                return(Problem(argException.ToString(), statusCode: StatusCodes.Status500InternalServerError,
                               title: argException.Message));
            }
            }

            if (string.IsNullOrWhiteSpace(sendIn.From) && string.IsNullOrWhiteSpace(foundTemplateEntity.DefaultFrom))
            {
                ModelState.AddModelError(nameof(sendIn.From), $"{nameof(sendIn.From)} is required");
                return(ValidationProblem(ModelState));
            }

            var newMailIn = new NewEmailInDto()
            {
                From          = sendIn.From ?? foundTemplateEntity.DefaultFrom,
                ToRecipients  = sendIn.ToRecipients ?? foundTemplateEntity.DefaultToRecipients,
                CcRecipients  = sendIn.CcRecipients ?? foundTemplateEntity.DefaultCcRecipients,
                BccRecipients = sendIn.BccRecipients ?? foundTemplateEntity.DefaultBccRecipients,
                Subject       = Handlebars.Compile(foundTemplateEntity.SubjectTemplate)(sendIn.Data),
                Body          = Handlebars.Compile(foundTemplateEntity.BodyTemplate)(sendIn.Data)
            };

            var newMailResult = await _mailService.CreateMail(newMailIn);

            switch (newMailResult)
            {
            case BadRequestTypedResult <bool> badRequestTypedResult:
                ModelState.AddModelError(badRequestTypedResult.Key, badRequestTypedResult.ErrorMessage);
                return(ValidationProblem(ModelState));

            case FailedTypedResult <bool> failedTypedResult:
                return(Problem(failedTypedResult.Error.ToString(), statusCode: StatusCodes.Status500InternalServerError,
                               title: failedTypedResult.Error.Message));

            case NotFoundTypedResult <bool> _:
                return(NotFound());

            case SuccessfulTypedResult <bool> _:
                return(NoContent());

            default:
            {
                var argException = new ArgumentOutOfRangeException(nameof(foundTemplateResult));
                return(Problem(argException.ToString(), statusCode: StatusCodes.Status500InternalServerError,
                               title: argException.Message));
            }
            }
        }