gohorsejobs/STATUS_REPORT.md

3.9 KiB

📊 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.
graph TD
    %% Estilos
    classDef working fill:#dcfce7,stroke:#16a34a,stroke-width:2px;
    classDef partial fill:#fef9c3,stroke:#ca8a04,stroke-width:2px,stroke-dasharray:5 5;
    classDef broken fill:#fee2e2,stroke:#dc2626,stroke-width:2px,stroke-dasharray:5 5;
    classDef critical fill:#991b1b,stroke:#fca5a5,stroke-width:4px,color:#fff;
    classDef success fill:#dcfce7,stroke:#16a34a,stroke-width:2px;
    classDef warning fill:#fef9c3,stroke:#ca8a04,stroke-width:2px;
    classDef error fill:#fee2e2,stroke:#dc2626,stroke-width:2px;

    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<br/>(Uploads)"]:::broken
        FCM[Firebase FCM]:::broken
        AW["Appwrite Realtime<br/>(Chat)"]:::broken
        ST["Stripe<br/>(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<br/>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 da empresa| 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.