SendGrid
Importante
O exemplo a seguir utiliza o SendGrid, mas você pode utilizar a biblioteca que desejar, o foco neste momento é o entendimento de como o Devprime habilita o uso de extensões e como integrá-las em seu projeto sem ferir os princípios de arquitetura estabelecidos, garantindo separação de responsabilidades e desacoplamento.
Criando um microserviço para utilizar no exemplo
Nós utilizaremos um microsserviço baseado na plataforma Devprime
- Utilize uma conta ativa no Devprime e ative o Devprime CLI.
- Inicie os containers pelo Docker (MongoDB e RabbitMQ)
- Crie a fila orderevents no RabbitMQ.
Digite o comando abaixo em um diretório de sua preferência e em seguida abra o projeto no Visual Studio, VSCODE ou sua IDE de preferência:
dp new order --state mongodb --stream rabbitmq --marketplace order
Acesse a pasta raiz do projeto: .\order\
Implementações de domínio
Nós vamos incluir um campo de Email
em nosso aggregate root
na camada de domínio. Abra a classe Order.cs
existente no caminho code .\src\core\domain\aggregates\order\Order.cs
, inclua a propriedade como segue destacado abaixo (linha 6) e salve as alterações:
|
|
Acelerando implementações com o CLI
O próximo passo será utilizar o CLI para acelerar grande parte das implementações necessárias e para isso digite o comando abaixo em seu terminal:
dp init
O CLI solicita autorização para alterar os arquivos necessários da solution, neste caso vamos digitar A
para autorizar todos os arquivos.
Iniciando a configuração do SendGrid
Altere a configuração da chave “Devprime_Custom” conforme exemplo abaixo:
code .\src\app\appsettings.json
|
|
Adicionando uma extension
Nós vamos incluir agora a classe “MailService” que será a nossa extension, através do seguinte comando do Devprime CLI.
|
|
O CLI solicita outra autorização para alterar os arquivos necessários da solution, tecle A
para autorizar todos os arquivos.
A imagem a seguir mostra a classe MailService e sua Interface IMailService, cuja responsabilidade será implementar as integrações com a API do SendGrid.
Ela mostra também a classe Extensions e a interface IExtensions cuja finalidade é ser um proxy que permite ao contexto de execução do Devprime Pipeline, acessar todas as extensions disponíveis na aplicação via injeção de dependência.
Ao rodar o comando para inclusão da extension, note que o CLI gerou também sua injeção na classe “Extensions”: code .\src\adapters\extensions\Extensions.cs
|
|
Adicionando a referência para a biblioteca SendGrid
Nós vamos incluir a biblioteca SendGrid em nosso projeto, lembre-se de definir o destino de instalação para o projeto “Devprime.Extensions”. code .\src\adapters\extensions\Devprime.Extensions.csproj
Via dotnet CLI
dotnet add .\src\adapters\extensions\Devprime.Extensions.csproj package SendGrid
Rode também o dotnet build
no projeto. (Lembre-se de estar na pasta raíz do projeto .\order\
):
dotnet build
Implementando a integração com SendGrid
Nós vamos alterar a interface “IMailService” code .\src\core\application\interfaces\adapters\extensions\IMailService.cs
, incluindo a assinatura de método a seguir:
|
|
Nós também precisamos implementar o método na classe “MailService”
code .\src\adapters\extensions\mailservice\MailService.cs
, conforme o modelo a seguir:
|
|
Vamos entender melhor alguns recursos existentes no código acima:
Code | Description |
---|---|
Dp.Settings.Default("…") | Obtem chave no AppSettings.json da aplicação |
Dp.Observability.Log("…") | Imprime log persoanlizado |
Implementado a chamada ao adapter de extension
O nosso cenário envolve um evento de domínio chamado “OrderCreated” e associado a ele temos um EventHandler chamado “OrderCreatedEventHandler”, que possui uma chamada ao Devprime State Adapter para persistência dos dados (linha 11) e emite um evento externo à aplicação (linha 23).
Caminho: code .\src\core\application\eventhandlers\order\OrderCreatedEventHandler.cs
|
|
Vamos alterar o código do nosso EventHandler conforme modelo abaixo (vide linhas destacadas):
|
|
Testando a aplicação
Agora que temos as implementações necessárias, vamos rodar o microsserviço através do comando abaixo:
Windows
.\run.ps1
Linux / Mac
.\run.sh
No browser, acesse o link: https://localhost:5001/swagger
, nós vamos utilizar o método POST para criar uma nova order:
`
Utilize o Request Body abaixo:
|
|
Você deverá receber o e-mail conforme configurado na aplicação.