feat: implement JWT-based authentication system with login, profile endpoints, and user creation utility
This commit is contained in:
@@ -0,0 +1,388 @@
|
||||
---
|
||||
trigger: always_on
|
||||
---
|
||||
|
||||
# AGENTS.md
|
||||
|
||||
## Workbloom ERP — Diretrizes para Agentes de IA
|
||||
|
||||
Este documento define as regras obrigatórias para qualquer agente que analise, altere, refatore ou implemente código no Workbloom ERP.
|
||||
|
||||
## 1. Regra principal: planejar antes de implementar
|
||||
|
||||
**Nunca altere o projeto diretamente.**
|
||||
|
||||
Antes de modificar qualquer arquivo, código, banco, endpoint, classe, serviço ou estrutura:
|
||||
|
||||
1. Analise o código existente.
|
||||
2. Identifique arquivos, componentes, dependências e impactos.
|
||||
3. Crie um plano objetivo.
|
||||
4. Apresente o plano ao usuário.
|
||||
5. Solicite autorização explícita.
|
||||
6. Só implemente após a autorização.
|
||||
|
||||
Consultas, análises, diagnósticos, explicações e sugestões que não alterem arquivos podem ser realizadas normalmente.
|
||||
|
||||
Para bugs, primeiro identifique causa e sintoma, analise o fluxo e apresente o plano de correção. Não faça tentativas de correção diretamente.
|
||||
|
||||
Formato:
|
||||
|
||||
```text
|
||||
Análise concluída.
|
||||
|
||||
Plano:
|
||||
1. ...
|
||||
2. ...
|
||||
3. ...
|
||||
|
||||
Arquivos que serão alterados:
|
||||
- ...
|
||||
|
||||
Impacto:
|
||||
- ...
|
||||
|
||||
Posso implementar?
|
||||
```
|
||||
|
||||
Após autorização:
|
||||
|
||||
```text
|
||||
Implementado.
|
||||
|
||||
Alterações:
|
||||
- ...
|
||||
|
||||
Validações realizadas:
|
||||
- ...
|
||||
|
||||
Possíveis pontos de atenção:
|
||||
- ...
|
||||
```
|
||||
|
||||
## 2. Stack e arquitetura
|
||||
|
||||
O backend **não utiliza Laravel nem CodeIgniter**.
|
||||
|
||||
A API utiliza:
|
||||
|
||||
```text
|
||||
claudecio/krothiumapi v1.0
|
||||
```
|
||||
|
||||
Respeite a arquitetura e as abstrações existentes no `claudecio/krothiumapi`. Não introduza outro framework, padrão ou arquitetura sem necessidade e autorização.
|
||||
|
||||
Antes de criar qualquer classe, serviço, repository, DTO, controller ou estrutura:
|
||||
|
||||
1. Procure uma estrutura equivalente.
|
||||
2. Identifique o padrão existente.
|
||||
3. Reutilize-o quando possível.
|
||||
4. Crie uma nova abordagem somente quando justificado.
|
||||
|
||||
Não replique funcionalidades já fornecidas pelo `krothiumapi`.
|
||||
|
||||
## 3. Banco de dados
|
||||
|
||||
O banco utilizado é **PostgreSQL**.
|
||||
|
||||
O sistema possui múltiplos domínios, incluindo autenticação, multi-tenant, empresas, configurações fiscais, clientes, fornecedores, produtos, serviços, documentos fiscais, pagamentos e administração.
|
||||
|
||||
Antes de qualquer alteração estrutural, analise o modelo atual, dependências e impacto nos dados.
|
||||
|
||||
Alterações em tabelas, colunas, índices, constraints, foreign keys, enums, funções, triggers, views ou migrations exigem:
|
||||
|
||||
1. análise;
|
||||
2. plano;
|
||||
3. autorização;
|
||||
4. implementação.
|
||||
|
||||
Nunca altere o banco diretamente sem autorização.
|
||||
|
||||
## 4. Regra absoluta de SQL
|
||||
|
||||
**É proibido utilizar `SELECT *` ou qualquer variação.**
|
||||
|
||||
Proibido:
|
||||
|
||||
```sql
|
||||
SELECT * FROM produto;
|
||||
|
||||
SELECT p.* FROM produto p;
|
||||
|
||||
SELECT COUNT(*) FROM produto;
|
||||
```
|
||||
|
||||
Prefira:
|
||||
|
||||
```sql
|
||||
SELECT
|
||||
id,
|
||||
uuid,
|
||||
nome,
|
||||
ncm
|
||||
FROM produto;
|
||||
```
|
||||
|
||||
Para contagem:
|
||||
|
||||
```sql
|
||||
SELECT COUNT(id)
|
||||
FROM produto;
|
||||
```
|
||||
|
||||
ou:
|
||||
|
||||
```sql
|
||||
SELECT COUNT(1)
|
||||
FROM produto;
|
||||
```
|
||||
|
||||
Toda consulta deve selecionar **somente as colunas necessárias**.
|
||||
|
||||
Isso vale para repositories, queries, services, endpoints, relatórios, JOINs, subqueries e views.
|
||||
|
||||
Nunca concatene valores fornecidos pelo usuário no SQL. Utilize parâmetros conforme o mecanismo existente no projeto.
|
||||
|
||||
## 5. JOINs
|
||||
|
||||
Sempre informe explicitamente as colunas e utilize aliases quando necessário.
|
||||
|
||||
```sql
|
||||
SELECT
|
||||
df.id,
|
||||
df.uuid,
|
||||
df.numero,
|
||||
c.id AS cliente_id,
|
||||
c.nome AS cliente_nome
|
||||
FROM documento_fiscal df
|
||||
INNER JOIN cliente c
|
||||
ON c.id = df.cliente_id;
|
||||
```
|
||||
|
||||
## 6. UUID
|
||||
|
||||
As entidades principais utilizam UUID.
|
||||
|
||||
A estratégia recomendada é UUID v7 gerado pela aplicação antes do `INSERT`, quando essa for a convenção da tabela.
|
||||
|
||||
Não altere a estratégia existente sem analisar primeiro sua implementação atual.
|
||||
|
||||
## 7. Transações e integridade
|
||||
|
||||
Operações que modificam múltiplos registros relacionados devem respeitar o padrão transacional existente.
|
||||
|
||||
Exemplo:
|
||||
|
||||
```text
|
||||
Documento fiscal
|
||||
├── Itens
|
||||
├── Pagamentos
|
||||
├── Duplicatas
|
||||
└── Série
|
||||
```
|
||||
|
||||
Operações fiscais relacionadas devem manter consistência e, quando aplicável, atomicidade.
|
||||
|
||||
Nunca:
|
||||
|
||||
* desabilite foreign keys;
|
||||
* ignore constraints;
|
||||
* insira dados inconsistentes;
|
||||
* utilize valores mágicos para contornar regras;
|
||||
* duplique dados para contornar relacionamentos.
|
||||
|
||||
## 8. Precisão numérica
|
||||
|
||||
Respeite a precisão definida pelo domínio:
|
||||
|
||||
```text
|
||||
Valores monetários: NUMERIC(15,2)
|
||||
Quantidades, pesos, alíquotas e fatores: NUMERIC(15,4)
|
||||
```
|
||||
|
||||
Não altere a precisão sem justificativa e autorização.
|
||||
|
||||
## 9. Backend e API
|
||||
|
||||
Ao implementar endpoints:
|
||||
|
||||
1. Valide as entradas.
|
||||
2. Utilize DTOs quando esse for o padrão existente.
|
||||
3. Mantenha regras de negócio fora de controllers excessivamente grandes.
|
||||
4. Utilize repositories quando esse for o padrão.
|
||||
5. Não espalhe SQL pela aplicação.
|
||||
6. Trate erros conforme o padrão existente.
|
||||
7. Preserve contratos da API.
|
||||
|
||||
Não altere contratos existentes sem avaliar seus consumidores.
|
||||
|
||||
## 10. Alterações mínimas
|
||||
|
||||
Altere somente o necessário para atender à tarefa.
|
||||
|
||||
Não faça:
|
||||
|
||||
* refatorações fora do escopo;
|
||||
* reorganização desnecessária;
|
||||
* renomeações por preferência pessoal;
|
||||
* alterações de estilo sem motivo;
|
||||
* atualizações de dependências sem necessidade;
|
||||
* mudanças em contratos não relacionados.
|
||||
|
||||
Quanto menor o escopo, melhor.
|
||||
|
||||
## 11. Remoção de código
|
||||
|
||||
Não remova métodos, classes, endpoints, tabelas, colunas, validações ou testes sem verificar seus consumidores e dependências.
|
||||
|
||||
Qualquer remoção deve ter justificativa.
|
||||
|
||||
## 12. Testes e validação
|
||||
|
||||
Toda alteração que modifique comportamento deve considerar testes.
|
||||
|
||||
Antes de finalizar:
|
||||
|
||||
1. Execute os testes relacionados.
|
||||
2. Valide o comportamento alterado.
|
||||
3. Verifique possíveis regressões.
|
||||
4. Informe o que foi testado.
|
||||
|
||||
Não crie uma infraestrutura de testes inteira sem necessidade quando ela não existir.
|
||||
|
||||
## 13. Documentação
|
||||
|
||||
Quando uma alteração modificar contrato de API, comportamento importante, banco, fluxo fiscal, configuração ou integração externa, avalie a necessidade de atualizar a documentação correspondente.
|
||||
|
||||
## 14. Segurança
|
||||
|
||||
Nunca:
|
||||
|
||||
* exponha senhas;
|
||||
* exponha tokens;
|
||||
* exponha certificados;
|
||||
* exponha chaves privadas;
|
||||
* exponha credenciais;
|
||||
* coloque secrets diretamente no código;
|
||||
* faça commit de credenciais;
|
||||
* registre dados sensíveis desnecessários.
|
||||
|
||||
Utilize o mecanismo de segurança já existente no projeto.
|
||||
|
||||
## 15. Logs
|
||||
|
||||
Logs devem auxiliar no diagnóstico sem expor informações sensíveis.
|
||||
|
||||
Nunca registre:
|
||||
|
||||
```text
|
||||
senhas
|
||||
tokens
|
||||
certificados
|
||||
chaves privadas
|
||||
credenciais
|
||||
dados sensíveis desnecessários
|
||||
```
|
||||
|
||||
Siga o padrão de logging existente e utilize o nível adequado.
|
||||
|
||||
## 16. Integrações fiscais
|
||||
|
||||
O sistema possui integrações com:
|
||||
|
||||
* NF-e Modelo 55;
|
||||
* NFC-e Modelo 65;
|
||||
* NFS-e;
|
||||
* CT-e Modelo 57;
|
||||
* MDF-e Modelo 58;
|
||||
* eventos fiscais e serviços relacionados.
|
||||
|
||||
Não simplifique regras fiscais apenas para facilitar uma implementação.
|
||||
|
||||
Alterações devem considerar os fluxos e relacionamentos existentes.
|
||||
|
||||
## 17. Fluxos críticos
|
||||
|
||||
Tenha atenção especial a operações com múltiplas etapas, como:
|
||||
|
||||
```text
|
||||
Produto
|
||||
↓
|
||||
Documento Fiscal
|
||||
↓
|
||||
Itens
|
||||
↓
|
||||
Pagamentos
|
||||
↓
|
||||
Duplicatas
|
||||
↓
|
||||
Assinatura
|
||||
↓
|
||||
Transmissão
|
||||
↓
|
||||
Autorização
|
||||
↓
|
||||
Atualização do documento
|
||||
↓
|
||||
Numeração da série
|
||||
```
|
||||
|
||||
Alterações em uma etapa podem afetar as demais.
|
||||
|
||||
## 18. Não assumir
|
||||
|
||||
Quando algo não estiver claro:
|
||||
|
||||
* procure no código;
|
||||
* procure configurações;
|
||||
* procure migrations;
|
||||
* procure classes relacionadas;
|
||||
* procure documentação;
|
||||
* verifique contratos existentes.
|
||||
|
||||
Não invente comportamento.
|
||||
|
||||
Se permanecer uma ambiguidade relevante, informe a dúvida ao usuário antes de implementar.
|
||||
|
||||
## 19. Regra de escopo
|
||||
|
||||
Não faça alterações silenciosas.
|
||||
|
||||
Não implemente melhorias não solicitadas.
|
||||
|
||||
Não introduza arquitetura nova sem necessidade.
|
||||
|
||||
Não altere banco sem planejamento e autorização.
|
||||
|
||||
Não comprometa integridade ou segurança para "fazer funcionar".
|
||||
|
||||
## 20. Checklist obrigatório
|
||||
|
||||
Antes de finalizar uma implementação:
|
||||
|
||||
* [ ] Plano apresentado antes da implementação.
|
||||
* [ ] Autorização explícita recebida.
|
||||
* [ ] Alteração dentro do escopo solicitado.
|
||||
* [ ] Arquitetura existente respeitada.
|
||||
* [ ] Nenhum Laravel utilizado.
|
||||
* [ ] Nenhum CodeIgniter utilizado.
|
||||
* [ ] `claudecio/krothiumapi v1.0` respeitado.
|
||||
* [ ] Nenhum `SELECT *` utilizado.
|
||||
* [ ] Colunas SQL explicitamente definidas.
|
||||
* [ ] SQL parametrizado.
|
||||
* [ ] Alterações de banco avaliadas.
|
||||
* [ ] Testes/validações executados.
|
||||
* [ ] Nenhuma refatoração desnecessária.
|
||||
* [ ] Nenhum segredo ou credencial exposto.
|
||||
* [ ] Resultado informado ao usuário.
|
||||
|
||||
## Regra de ouro
|
||||
|
||||
**Planeje antes de implementar.
|
||||
Peça autorização antes de alterar.
|
||||
Nunca utilize `SELECT *`.
|
||||
Respeite a arquitetura existente.
|
||||
Não utilize Laravel ou CodeIgniter.
|
||||
Respeite `claudecio/krothiumapi v1.0`.
|
||||
Não altere banco sem planejamento e autorização.
|
||||
Não faça alterações fora do escopo.
|
||||
Preserve segurança e integridade dos dados.**
|
||||
Reference in New Issue
Block a user