/spring-email-service-clean-architecture

Spring web application for Email Service with clean architecture with Simple Java Mail and Mailtrap

Primary LanguageJava

Spring Email Service With Clean Architecture šŸ“©

Java Spring

Esse projeto foi feito para ser um back-end de uma API RESTful de um serviƧo de envios de e-mails por meio do protocolo SMTP utilizando o Spring Boot. Ele recebe o envio do e-mail atravĆ©s da API e envia para um serviƧo externo de envio de gerenciamento de e-mails SMTP, para que entĆ£o seja enviado e-mail para o destinĆ”rio final.

šŸ’» Arquitetura da aplicaĆ§Ć£o

A aplicaĆ§Ć£o foi desenvolvida seguindo os princĆ­pios do Clean Architecture

  • /controllers/ - Camada de Controllers da aplicaĆ§Ć£o RESTful
    • Classe EmailSenderController - Ɖ o controller RESTful da aplicaĆ§Ć£o Spring
  • /infrastrucutre - Ɖ o provedor do serviƧo de e-mail externo, implementaĆ§Ć£o do serviƧo da biblioteca Simple Java Mail para o envio de e-mails
    • Classe SimpleJavaMailConfig - Guarda o objeto Mailer, Ć© um Bean de configuraĆ§Ć£o do Simple Java Mail, instanciado automaticamente pelo Spring
    • Classe SimpleJavaMailSender - Disponibiliza um Service com o propĆ³sito de ser um Gateway usado na aplicaĆ§Ć£o, sendo a regra de negĆ³cio para o envio de e-mails
  • /core/ - DiretĆ³rio que guarda os Casos de Usos e regras de negĆ³cio da aplicaĆ§Ć£o
    • Interface EmailSenderUseCase - Ć© uma interface (contrato) de regra de negĆ³cio do serviƧo de envio e-mail (alto nĆ­vel da aplicaĆ§Ć£o), sendo tambĆ©m agnĆ³stica (nĆ£o depende) em relaĆ§Ć£o aos outros componentes da aplicaĆ§Ć£o
    • Record EmailRequest - Ɖ o DTO utilizado no Body da requisiĆ§Ć£o do Controller principal
  • /application/ - Ɖ a camada intermediaria que dialoga com os casos de usos e os serviƧos externos (que estĆ£o no pacote infrastructure)
    • Arquivo EmailSenderService - Ć© o serviƧo em si que Ć© utilizado no controller
  • /adapters/ - Disponibiliza interfaces que adaptam o mundo exterior (APIs externas como a classe SimpleJavaMailSender para a aplicaĆ§Ć£o, com o
    • Interface EmailSenderGateway - Define a interface (contrato) que todas as APIs externas de envio de e-mails devem implementar

šŸ”„ Testando aplicaĆ§Ć£o

O endpoint da aplicaĆ§Ć£o estĆ” em http://localhost:8080/api/email e recebe o mĆ©todo POST contendo o seguinte body em arquivo json:

{
	"to": "Email para quem serĆ” enviado <johndoe@email.com>",
	"subject": "Nome do assunto",
	"body": "<p>Mensagem (body) da aplicaĆ§Ć£o que pode ser um arquivo HTML</p>"
}

Para testar Ʃ necessƔrio criar uma conta no https://mailtrap.io e com as configuraƧƵes do mailtrap, definir as seguintes configuraƧƵes no arquivo application.properties localizado em /src/main/resources

mailtrap.username=usernameDefinidoNoMailtrap
mailtrap.password=passwordDefinidoNoMailtrap

ObservaĆ§Ć£o: essa aplicaĆ§Ć£o foi desenvolvida seguindo o VĆ­deo da Fernanda Kipper mas com a utilizaĆ§Ć£o do serviƧo de e-mail Mailtrap.io, com a utilizaĆ§Ć£o da biblioteca Simple Java Mail

Feito com ā˜• por Brendon Gomes