Repository navigation
PostgreSQL
Rótulo: Referência TL;DR: RDS PostgreSQL 17.6 (
db.t4g.micro) hospeda os bancos da OS e de Cadastros. EF Core 10 com migrations automatizadas no startup. Última revisão: 2026-05-18
| Recurso | Valor |
|---|---|
| Engine | PostgreSQL 17.6 |
| Instância | db.t4g.micro |
| Storage | gp3, criptografado em repouso (KMS) |
| Backup | retention 7 dias, snapshot final ao destruir |
| Acesso | privado — apenas dentro da VPC, sem public_access
|
| Multi-AZ | não (custo) |
| Ambientes |
hml e prd (instâncias separadas) |
Provisionada pelo módulo db/ do mecanica-hermes-infra.
| Serviço | Banco | Schemas principais |
|---|---|---|
| API Ordem de Serviço | MecHermesOrdemDeServicoDB |
public (agregado + outbox + histórico) |
| API Cadastros | mecanica_hermes_cadastros |
public (clientes, veículos, produtos, webhook events, outbox) |
erDiagram
ORDENS_DE_SERVICO ||--o{ ORDEM_DE_SERVICO_PRODUTOS : tem
ORDENS_DE_SERVICO ||--o{ ORDEM_DE_SERVICO_SERVICOS : tem
ORDENS_DE_SERVICO ||--o{ ORDEM_DE_SERVICO_HISTORICO_STATUS : registra
ORDENS_DE_SERVICO {
uuid id PK
uuid cliente_id
text status
decimal valor_total
timestamptz criada_em
timestamptz atualizada_em
int version "otimismo"
}
ORDEM_DE_SERVICO_PRODUTOS {
uuid id PK
uuid ordem_de_servico_id FK
uuid produto_id
text nome
decimal preco_snapshot
}
ORDEM_DE_SERVICO_HISTORICO_STATUS {
uuid id PK
uuid ordem_de_servico_id FK
text status
timestamptz alterado_em
}
erDiagram
CLIENTES ||--o{ VEICULOS : possui
CLIENTES {
uuid id PK
text cpf UK "unique partial WHERE NOT is_deleted"
text nome
text email UK "unique partial WHERE NOT is_deleted"
bool is_deleted
}
VEICULOS {
uuid id PK
uuid cliente_id FK
text placa
text modelo
}
PRODUTOS {
uuid id PK
text codigo UK
text nome
decimal preco_unitario
bool is_deleted
}
WEBHOOK_EVENTS {
text webhook_event_id PK
timestamptz received_at
}
WEBHOOK_LINKS {
text token PK
uuid ordem_de_servico_id
timestamptz expira_em
}
OUTBOX_MESSAGES {
uuid id PK
text entity_name
jsonb payload
text status
}
Soft delete + unique constraint normal seria conflitante (não conseguiríamos recriar um cliente deletado com o mesmo CPF). Solução: índices únicos filtrados:
CREATE UNIQUE INDEX ix_clientes_cpf_active
ON clientes (cpf)
WHERE is_deleted = FALSE;
CREATE UNIQUE INDEX ix_produtos_codigo_active
ON produtos (codigo)
WHERE is_deleted = FALSE;EF Core 10 + Npgsql:
dotnet ef migrations add <Name> --project src/Mecanica.Hermes.<svc>.Infrastructure --startup-project src/Mecanica.Hermes.<svc>.ApiAs migrations são aplicadas automaticamente no startup via MigrateDatabaseAsync() em ambos os serviços. Em produção, isso significa que o primeiro pod a subir aplica; os demais esperam.
Gerenciada pelo AWS Secrets Manager (Master Secret do RDS). Os pods leem via Kustomize Secret — ver Cluster Kubernetes.
A Lambda CognitoToken também lê a senha do mesmo Secret consolidado — ver Lambda CognitoToken.
🔧 Mecânica Hermes — Tech Challenge 13SOAT (FIAP) · Wiki pública, não inclua credenciais · Editar a Wiki · Plano editorial
🏠 Home
📖 Visão geral
🧭 Como usar a Wiki
🚀 Início rápido
🏛️ Arquitetura
Padrões transversais
- Clean Architecture + DDD + CQRS
- Result Pattern
- State Pattern
- SAGA com MassTransit
- Outbox transacional
- Idempotência cross-service
- DLQ observability
Mensageria
Persistência
Segurança
- Autenticação Cognito + JWT
- Autorização por scopes
- M2M Client Credentials
- Webhooks assinados (HMAC)
- Modelo de ameaças
🔁 Fluxos de negócio
- Caminho feliz
- Orçamento rejeitado
- Pagamento recusado e recriado
- Pagamento expirado
- Cancelamento em execução
- Cancelamento em aguardando pagamento
- Idempotência de webhook
- Proteção por timeout da SAGA
🛠️ Infraestrutura e deploy
- Diagrama AWS completo
- Provisionamento (Terraform)
- Cluster Kubernetes
- API Gateway + VPC Link
- Cognito
- Lambda CognitoToken
- Bancos de dados
- RabbitMQ
- Pipelines GitHub Actions
📊 Observabilidade
- Visão geral
- Logs
- Métricas de negócio
- Métricas de mensageria
- Traces distribuídos
- Dashboards e alertas
🧪 Qualidade
🚨 Operação
- Runbook macro
- Runbook — Ordem de Serviço
- Runbook — Cadastros
- Runbook — Pagamentos
- Resposta a incidentes
- Forçar limpeza de namespace
🧩 SDK compartilhado
👥 Contribuição
📚 Referência
🧠 Decisões