https://github.com/instruct-br/notificador
O Notificador é uma aplicação FastAPI e é uma ilustração de um sistema de notificações.
https://github.com/instruct-br/notificador
Last synced: 8 months ago
JSON representation
O Notificador é uma aplicação FastAPI e é uma ilustração de um sistema de notificações.
- Host: GitHub
- URL: https://github.com/instruct-br/notificador
- Owner: instruct-br
- Created: 2023-10-02T18:51:46.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2023-10-03T11:49:47.000Z (over 2 years ago)
- Last Synced: 2023-10-03T22:29:59.706Z (over 2 years ago)
- Language: Python
- Size: 27.3 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Notificador
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.
## Como Usar
### Clonando o Repositório
Clone o repositório para a sua máquina local:
```shell
git clone https://github.com/seu-usuario/notificador.git
cd notificador
```
### Configuração do Ambiente
Certifique-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`:
```env
SENDGRID_API_KEY=SuaChaveAPI
SMTP_REMETENTE=seu-email@example.com
```
### Executando o Projeto
No terminal, execute o seguinte comando para construir e iniciar os contêineres Docker:
```shell
docker-compose up -d --build
```
Uma 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.
## Endpoints
A aplicação oferece os seguintes endpoints:
### 1. Cadastro de Notificações
- 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 o `type` for "email").
- `webhook`: URL do webhook para notificar (obrigatório se o `type` for "webhook").
- `titulo`: O título da notificação.
- `mensagem`: A mensagem que será notificada.
### 2. Listagem de Notificações
- 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".
## Funcionamento Interno
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.