04 - Mermaid do fluxo completo da aplicação

Fluxo do usuário acessando '/docs/[...slug]'

flowchart LR
    subgraph Browser["Navegador do usuário"]
      U[Usuário acessa /docs/alguma/pagina]
    end

    subgraph Next["Next.js 16 (Server)"]
      A[Route handler /docs/[...slug]/page.tsx]
      L[Verifica sessão com supabaseServer.auth.getUser()]
      Q[SELECT em app_docs (via Supabase Client)]
      D[Baixa markdown do Storage via supabaseAdmin]
      R[Renderiza markdown em HTML e devolve resposta]
    end

    subgraph Supabase["Supabase"]
      subgraph Auth["Supabase Auth"]
        AU[(auth.users)]
      end

      subgraph DB["Postgres + RLS"]
        G[(app_groups)]
        GU[(app_group_users)]
        F[(app_group_folders)]
        DOC[(app_docs)]
        GD[(app_group_docs)]
      end

      subgraph Storage["Supabase Storage"]
        B[(Bucket 'docs')]
      end
    end

    U --> A
    A --> L
    L -->|sem user| R1[redirect /login]
    L -->|user ok| Q

    Q -->|com JWT do usuário| DOC
    DOC -->|RLS verifica grupos/pastas\nusando app_group_users, app_group_folders, app_group_docs| DOC_FOUND{Doc encontrado\np/esse usuário?}

    DOC_FOUND -->|não| NF[404 / Sem permissão]
    DOC_FOUND -->|sim| D

    D --> B
    B --> D
    D --> R
    R --> U

Fluxo de administração (painéis '/admin')

flowchart LR
    subgraph AdminBrowser["Navegador (Admin)"]
      A1[Admin acessa /admin/groups ou /admin/docs]
    end

    subgraph AdminNext["Next.js 16 (Server)"]
      P[Page /admin/* verifica email do admin]
      SA[Server Action: inserir/atualizar\napp_group_folders / app_group_docs]
    end

    subgraph AdminSupabase["Supabase"]
      DB[(Postgres)]
    end

    A1 --> P
    P -->|supabaseServer.auth.getUser()| PCHK{Email permitidos?}

    PCHK -->|não| REDIR[redirect /]
    PCHK -->|sim| SA
    SA -->|supabaseAdmin (service_role)| DB
    DB --> SA