O Notificador é uma aplicação FastAPI que serve como uma demonstração de um sistema de notificações. Essa aplicação é capaz de enviar notificações tanto por e-mail quanto por webhook (integrações com ferramentas como Mattermost e Slack). Além disso, o projeto ilustra o uso do RabbitMQ com a biblioteca aio-pika e também do MongoDB.
Clone o repositório para a sua máquina local:
git clone https://github.com/seu-usuario/notificador.git
cd notificadorCertifique-se de que você possui o Docker e o Docker Compose instalados.
Crie um arquivo .env no diretório raiz do projeto. Você pode copiar o arquivo .env.sample disponível e editá-lo conforme necessário.
Se você planeja utilizar o serviço de envio de e-mail, configure uma conta no SendGrid e forneça as seguintes variáveis de ambiente no arquivo .env:
SENDGRID_API_KEY=SuaChaveAPI
SMTP_REMETENTE=seu-email@example.comNo terminal, execute o seguinte comando para construir e iniciar os contêineres Docker:
docker-compose up -d --buildUma vez que a aplicação esteja em execução, a documentação Swagger dos endpoints estará automaticamente disponível em http://localhost:8080/docs. Você pode usar essa documentação para testar os endpoints.
A aplicação oferece os seguintes endpoints:
- Método: POST
- URL:
http://localhost:8080/notificacoes - Payload: JSON com os seguintes atributos:
type: Tipo de notificação, atualmente suporta os valores "email" e "webhook".email: E-mail que deve receber a notificação (obrigatório se otypefor "email").webhook: URL do webhook para notificar (obrigatório se otypefor "webhook").titulo: O título da notificação.mensagem: A mensagem que será notificada.
- Método: GET
- URL:
http://localhost:8080/notificacoes - Resposta: Retorna o ID da notificação, o título e o status. O status pode ser "PENDENTE", "ENVIADA" ou "FALHA_AO_ENVIAR".
Quando o endpoint de cadastro de notificações é chamado, a aplicação salva os detalhes da notificação no MongoDB com o status "PENDENTE". Além disso, ela publica uma mensagem na fila "disparo_notificacao" do RabbitMQ utilizando a biblioteca aio-pika e, em seguida, retorna uma resposta.
A própria aplicação consome a fila "disparo_notificacao", onde um consumidor assíncrono lida com o envio real da mensagem, seja por webhook ou por e-mail. Após o envio da notificação, o consumidor atualiza o status no MongoDB, marcando-o como "ENVIADA" em caso de sucesso ou "FALHA_AO_ENVIAR" em caso de erro. Tudo isso é feito de forma assíncrona com a ajuda da biblioteca asyncio.