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)); } }
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)); } } }