🔄 Cap 06: Diagramas de Sequência e Estados com Mermaid - Exemplos Práticos
Código executável e renderização de diagramas dinâmicos para arquiteturas síncronas/assíncronas e máquinas de estados.
📄 Exemplo 1: Fluxo de Autenticação JWT com Refresh Token
```mermaid
sequenceDiagram
autonumber
actor User as Usuário
participant App as Frontend (React)
participant API as API Backend
participant Auth as Provedor OAuth/JWT
User->>App: Submete credenciais (email/senha)
App->>Auth: POST /auth/login
Auth-->>App: Retorna Access Token (exp: 15m) + Refresh Token (exp: 7d)
Note over App,API: Requisições normais utilizando o Access Token
App->>API: GET /perfil (Bearer Token)
API-->>App: 200 OK (Dados do perfil)
Note over App,API: Cenário de Expiração do Access Token
App->>API: GET /relatorios
API-->>App: 401 Unauthorized (Token Expirado)
App->>Auth: POST /auth/refresh (Envia Refresh Token)
Auth-->>App: Retorna Novo Access Token
App->>API: Repete GET /relatorios (Com novo token)
API-->>App: 200 OK (Relatório entregue) ⚡
```
Diagrama Renderizado Diretamente:
sequenceDiagram
autonumber
actor User as Usuário
participant App as Frontend (React)
participant API as API Backend
participant Auth as Provedor OAuth/JWT
User->>App: Submete credenciais (email/senha)
App->>Auth: POST /auth/login
Auth-->>App: Retorna Access Token (exp: 15m) + Refresh Token (exp: 7d)
Note over App,API: Requisições normais utilizando o Access Token
App->>API: GET /perfil (Bearer Token)
API-->>App: 200 OK (Dados do perfil)
Note over App,API: Cenário de Expiração do Access Token
App->>API: GET /relatorios
API-->>App: 401 Unauthorized (Token Expirado)
App->>Auth: POST /auth/refresh (Envia Refresh Token)
Auth-->>App: Retorna Novo Access Token
App->>API: Repete GET /relatorios (Com novo token)
API-->>App: 200 OK (Relatório entregue) ⚡
📄 Exemplo 2: Máquina de Estados de Conexão WebSocket
stateDiagram-v2
[*] --> Desconectado
Desconectado --> Conectando: ws.connect()
Conectando --> Conectado: Handshake 101 Switching Protocols
Conectando --> Desconectado: Erro de Rede / Timeout
state Conectado {
[*] --> Ocioso
Ocioso --> Transmitindo: send(mensagem)
Transmitindo --> Ocioso: ack recebido
Ocioso --> Heartbeat: ping / pong a cada 30s
Heartbeat --> Ocioso
}
Conectado --> Desconectado: ws.close()
Desconectado --> [*]