# Arquitetura do EducaGest

Esta página descreve a estrutura técnica e os fluxos de dados do sistema EducaGest.

## 🏗️ Estrutura de Pastas

O sistema segue uma abordagem modular simplificada:

```mermaid
graph TD
    A[Root] --> B[app/Modules]
    B --> B1[Core]
    B --> B2[Docs]
    A --> C[resources/js]
    C --> C1[Ajax Lib]
    C --> C2[SPA Engine]
    A --> D[docs]
    D --> D1[Source Markdown]
```

## 🔐 Fluxo de Autenticação & Tenant

Como o isolamento de dados funciona no EducaGest:

```mermaid
sequenceDiagram
    participant U as Usuário
    participant M as Middleware (Tenant)
    participant C as Controller
    participant S as Scope (TenantScope)
    participant D as Banco de Dados

    U->>M: Requisição (/t/demo/dashboard)
    M->>M: Identifica Tenant (slug: demo)
    M->>C: Passa identificação
    C->>S: Executa Query (Eloquent)
    S-->>D: Injecta 'WHERE tenant_id = X'
    D-->>U: Retorna Dados Isolados
```

## 🗃️ Modelo de Dados (Core)

Principais relacionamentos da Fundação:

```mermaid
erDiagram
    TENANT ||--o{ USER : "possui"
    ROLE ||--o{ USER : "define"
    ROLE ||--o{ PERMISSION : "contém"
    USER ||--o{ ACTIVITY_LOG : "gera"
    TENANT ||--o{ TENANT_SETTING : "configura"

    TENANT {
        string name
        string slug
        string status
    }
    USER {
        string name
        string email
        string password
    }
```

## 🚀 Ciclo de Vida da Requisição AJAX

```mermaid
graph LR
    A[Form Submit] --> B[JS: AJAX.post]
    B --> C[Laravel: Validation]
    C -- Erro --> D[JS: HandleValidationErrors]
    D --> E[Exibe Toast/Errors]
    C -- Sucesso --> F[Laravel: Logic/Save]
    F --> G[JSON Response]
    G --> H[JS: Notifications.success]
```
