Funcionalidades
Usuários
- Registro de novos funcionários via CLI e via API
- CLI:
dundie create-user [Nome] [Email] [Password Inicial] [departamento]
- API:
POST /user/ data={nome:.., email:.., departamento:.., password:..}
- Usuários do departamento
management
são considerados super usuáripos - O
username
é gerado a partir do slug do nome do usuárioPam Besly
->pam-besly
- CLI:
- Autenticação de usuários com JWT token
- Para usar a API será necessário uma chamada
GET /token data={username, password}
e todas as chamadas subsequentes precisarão do token informado nosHEADERS
.
- Para usar a API será necessário uma chamada
- O usuário pode requisitar um token para alteração de senha
Transações
- Transações não podem ser deletadas ou canceladas, cada transação é um item no histórico da conta do usuário em questão.
- Qualquer usuário com um token poderá fazer uma chamada para
POST /transaction/username/ data={value=100}
esta chamada adiciona um novo registro na tabelaTransaction
contentouser_id: <usuario_dono_da_conta>, from_id: <usuário que fez o depósito>, value: <integer>, date: <timestamp>
- O usuário só poderá fazer uma transação caso o saldo da sua própria conta seja suficiente para cobrir o custo da transação.
- O saldo de um usuário é a soma de todas as suas transações.
Endpoints:
POST /transaction/username/
- Registra uma transação para um usuário- Acesso:
Geral
- Validação: O usuário autenticado é o
from_id
da transação e deve ter saldo suficiente.
- Acesso:
GET /transaction/username/
- Retorna as transações de um usuário incluindo seubalance
(saldo todal)- Acesso:
Manager
ouusername == current_user
- Acesso:
GET /transaction/
- Retorna todas as transações
API Spec
Arquitetura
Fase 1
- 1 Serviço de API
- 1 Serviço de Banco de Dados
graph LR; A["API (FastAPI) fa:fa-globe"] B[("Banco de Dados (PG) fa:fa-cubes")] A --> B
Fase 2
- 1 Serviço de API
- 1 Serviço de Banco de Dados
- 1 Serviço consumidor de tarefas (RQ)
- 1 Serviço de fila de mensagens (Redis)
graph TD; A["API (FastAPI) fa:fa-globe"] B[("Banco de Dados (PG) fa:fa-cubes")] C>"Fila de mensagens (Redis) fa:fa-bars"] D[["Consumidor de tarefas (RQ) fa:fa-gears"]] A --> B A --> C D --> C D --> B
Agora vamos ver como será a estrutura dos arquivos -->