SendGrid
Importante
En el siguiente ejemplo se usa SendGrid, pero puede usar cualquier biblioteca que desee, el enfoque en este punto está en comprender cómo Devprime permite el uso de extensiones y cómo integrarlas en su proyecto sin dañar los principios de arquitectura establecidos, asegurando la separación de responsabilidades y el desacoplamiento.
Creación de un microservicio para usar en el ejemplo
Utilizaremos un microservicio basado en la plataforma Devprime
- Utilice una cuenta activa en Devprime y habilite la CLI de Devprime.
- Lanzar contenedores desde docker (MongoDB y RabbitMQ)
- Cree la cola orderevents en RabbitMQ.
Escriba el siguiente comando en un directorio de su elección y, a continuación, abra el proyecto en Visual Studio, VSCODE o el IDE que prefiera:
dp new order --state mongodb --stream rabbitmq --marketplace order
Vaya a la carpeta raíz del proyecto: .\order\
Implementaciones de dominio
Vamos a incluir un campo de Email
en nuestra capa aggregate root
en el dominio. Abra la clase existente Order.cs
en la ruta code .\src\core\domain\aggregates\order\Order.cs
, agregue la propiedad como se resalta a continuación (línea 6) y guarde los cambios:
|
|
Aceleración de las implementaciones con la CLI
El siguiente paso será usar la CLI para acelerar la mayoría de las implementaciones necesarias y para eso escriba el siguiente comando en su terminal:
dp init
La CLI solicita autorización para cambiar los archivos necesarios de la solución, en este caso escribiremos A
para autorizar todos los archivos.
Iniciando la configuración de SendGrid
Cambie la configuración de la tecla “Devprime_Custom” como se muestra en el siguiente ejemplo:
code .\src\app\appsettings.json
|
|
Agregar una extensión
Ahora vamos a incluir la clase “MailService” que será nuestra extensión, a través del siguiente comando de la CLI de Devprime.
|
|
La CLI solicita otra autorización para cambiar los archivos necesarios de la solución, presione A
para autorizar todos los archivos.
En la siguiente imagen se muestra la clase MailService y su interfaz IMailService, que se encargará de implementar las integraciones con la API SendGrid.
También muestra la clase Extensions y la interfaz IExtensions cuyo propósito es ser un proxy que permita que el contexto de ejecución de Devprime Pipeline acceda a todas las extensiones disponibles en la aplicación a través de la inserción de dependencias.
Al ejecutar el comando para incluir la extensión, tenga en cuenta que la CLI también generó su inyección en la clase “Extensiones”: code .\src\adapters\extensions\Extensions.cs
|
|
Agregar la referencia a la biblioteca SendGrid
Vamos a incluir la biblioteca SendGrid en nuestro proyecto, recuerde establecer el destino de instalación para el proyecto “Devprime.Extensions”. code .\src\adapters\extensions\Devprime.Extensions.csproj
A través de dotnet CLI
dotnet add .\src\adapters\extensions\Devprime.Extensions.csproj package SendGrid
Ejecute también dotnet build
en el proyecto. (Recuerde estar en la carpeta raíz del proyecto .\order\
):
dotnet build
Implementación de la integración con SendGrid
Vamos a cambiar la interfaz “IMailService” code .\src\core\application\interfaces\adapters\extensions\IMailService.cs
, incluida la siguiente firma de método:
|
|
También necesitamos implementar el método en la clase “MailService”
code .\src\adapters\extensions\mailservice\MailService.cs
, según el siguiente modelo:
|
|
Echemos un vistazo más de cerca a algunas de las características que existen en el código anterior:
Código | Descripción |
---|---|
Dp.Settings.Default("…") | Obtener clave en la aplicación AppSettings.json |
Dp.Observability.Log("…") | Imprime tronco persoanlizado |
Se implementó la llamada al adaptador de extensión
Nuestro escenario implica un evento de dominio denominado “OrderCreated” y asociado a él hay un EventHandler denominado “OrderCreatedEventHandler”, que tiene una llamada al adaptador de estado de Devprime para la persistencia de datos (línea 11) y emite un evento externo a la aplicación (línea 23).
Camino: code .\src\core\application\eventhandlers\order\OrderCreatedEventHandler.cs
|
|
Cambiemos el código de nuestro EventHandler de acuerdo con el siguiente modelo (ver líneas resaltadas):
|
|
Probando la aplicación
Ahora que tenemos las implementaciones necesarias, ejecutemos el microservicio usando el siguiente comando:
Windows
.\run.ps1
Linux/Mac
.\run.sh
En el navegador, vaya al enlace: https://localhost:5001/swagger
, usaremos el método POST para crear un nuevo pedido:
`
Utilice el cuerpo de la solicitud a continuación:
|
|
Debería recibir el correo electrónico tal y como está configurado en la aplicación.