# 📊 Relatório Técnico & Status (GoHorseJobs)
## 1. Visão Geral da Arquitetura (Real vs. Planejado)
Este diagrama reflete o estado atual do sistema em ambiente de desenvolvimento (`localhost`), destacando os pontos funcionais e as integrações pendentes.
* 🟢 **Verde:** Funcionando/Operacional.
* 🟡 **Amarelo:** Parcial/Bugado.
* 🔴 **Vermelho:** Quebrado/Faltando Config.
* 💀 **Vermelho Escuro:** Falha Crítica de Segurança.
```mermaid
graph TD
%% --- ESTILOS DE ALTO CONTRASTE ---
%% Adicionei 'color:#000' (Preto) e aumentei a borda para 3px
classDef working fill:#dcfce7,stroke:#16a34a,stroke-width:3px,color:#000;
classDef partial fill:#fef9c3,stroke:#ca8a04,stroke-width:3px,stroke-dasharray:5 5,color:#000;
classDef broken fill:#fee2e2,stroke:#dc2626,stroke-width:3px,stroke-dasharray:5 5,color:#000;
classDef critical fill:#991b1b,stroke:#fca5a5,stroke-width:4px,color:#fff;
classDef success fill:#dcfce7,stroke:#16a34a,stroke-width:3px,color:#000;
classDef warning fill:#fef9c3,stroke:#ca8a04,stroke-width:3px,color:#000;
classDef error fill:#fee2e2,stroke:#dc2626,stroke-width:3px,color:#000;
subgraph Frontend["Frontend & App"]
FE[Next.js 15]:::working
end
subgraph Backend["Core Backend"]
API[Go API]:::working
DB[(PostgreSQL)]:::working
BO[NestJS Backoffice]:::broken
end
subgraph Integracoes["Integrações (O Gargalo)"]
MQ[LavinMQ]:::broken
S3["Cloudflare R2/S3
(Uploads)"]:::broken
FCM[Firebase FCM]:::broken
AW["Appwrite Realtime
(Chat)"]:::broken
ST["Stripe
(Pagamentos)"]:::broken
end
%% Fluxos
FE -->|✅ OK| API
API -->|✅ OK| DB
%% Falhas
API -.->|❌ Falha no Upload| S3
FE -.->|❌ Falha na Conexão| AW
API -.->|❌ Não Configurado| MQ
API -.->|❌ Mockado/Ignorado| ST
%% Alerta de Segurança
SEC["⚠️ FALHA CRÍTICA DE SEGURANÇA
Usuário altera o próprio Role para SuperAdmin"]:::critical
FE -.-> SEC
%% Atores
Empresa((Empresa))
Candidato((Candidato))
%% Fluxo Empresa
subgraph JornadaEmpresa["Jornada da Empresa"]
LoginE[Login/Registro]:::success
Dash[Dashboard]:::warning
NewJob[Criar Vaga]:::warning
Payment[Pagamento]:::error
ListJobs[Listar Minhas Vagas]:::error
AdminUser[Gerenciar Usuários]:::success
end
%% Fluxo Candidato
subgraph JornadaCandidato["Jornada do Candidato"]
Search[Buscar Vagas]:::success
Details[Ver Detalhes]:::success
Apply[Candidatar-se]:::error
end
%% Conexões Empresa
Empresa --> LoginE
LoginE --> Dash
Dash -->|Botão 'Publish' não funciona| NewJob
NewJob -->|❌ Salva mas não aparece na lista| ListJobs
NewJob -.->|❌ Pula Etapa| Payment
LoginE -->|⚠️ PERIGO: Permite virar Admin| AdminUser
%% Conexões Candidato
Candidato --> Search
Search -->|Vê vaga criada pela empresa| Details
Details -->|❌ Erro: Upload Obrigatório Falha| Apply
%% Funcionalidades Isoladas
subgraph OutrosModulos["Outros Módulos"]
Tickets[Tickets/Suporte]:::success
Chat[Chat Realtime]:::error
end
```
## 2. Diagnóstico de Problemas Críticos
🚨 Segurança (Nível Crítico)
Escalada de Privilégio: Falha de controle de acesso (RBAC). A empresa consegue editar o próprio perfil e se tornar SuperAdmin via API/Frontend (PUT /users), ganhando controle total do sistema.
⛔ Funcional (Bloqueante)
Upload de Currículo: O fluxo do candidato é interrompido pois o campo de currículo é obrigatório, mas o serviço de Storage (S3/R2) não está configurado com as chaves de acesso.
Listagem de Vagas (Empresa): A empresa cria a vaga, mas ela não aparece na lista "Minhas Vagas" (possível erro de filtro por ID no backend).
🛠️ Próximos Passos Sugeridos
HOTFIX: Bloquear alteração de role no update de usuários.
INFRA: Configurar credenciais do Bucket S3/R2.
FIX: Corrigir query de listagem de vagas no dashboard da empresa.