Visão de Processos
Este documento apresenta a visão de processos do AnatoQuizUp, descrevendo como os principais fluxos da aplicação se comportam em tempo de execução.
A visão de processos foca na interação entre usuário, frontend, BFF, backend e banco de dados durante a execução das funcionalidades principais da Release Major 1.
Fluxo geral
Em alto nível, os processos da aplicação seguem o seguinte fluxo:
sequenceDiagram
actor Usuario as Usuário
participant Frontend
participant BFF
participant Backend as API Backend
participant Banco as Banco de Dados
Usuario->>Frontend: Interage com a interface
Frontend->>BFF: Envia requisição HTTP (Bearer JWT)
BFF->>BFF: Valida JWT (quando rota autenticada)
BFF->>Backend: Repassa com X-Internal-Token
Backend->>Banco: Consulta ou persiste dados
Banco-->>Backend: Retorna dados
Backend-->>BFF: Retorna resposta da API
BFF-->>Frontend: Retorna resposta
Frontend-->>Usuario: Atualiza a interface
Processos Especificos
Processo de cadastro de aluno
sequenceDiagram
actor Aluno
participant Frontend
participant BFF
participant Backend as API Backend
participant Banco as Banco de Dados
Aluno->>Frontend: Preenche formulário de cadastro
Frontend->>Frontend: Valida campos obrigatórios
Frontend->>BFF: POST /api/v1/autenticacao/cadastro
BFF->>Backend: POST /api/v1/autenticacao/cadastro (X-Internal-Token)
Backend->>Backend: Valida dados da requisição
Backend->>Banco: Verifica se email já existe
Banco-->>Backend: Retorna resultado da consulta
alt Email já cadastrado
Backend-->>BFF: Retorna erro de conflito
BFF-->>Frontend: Retorna erro de conflito
Frontend-->>Aluno: Exibe mensagem de erro
else Email disponível
Backend->>Backend: Gera hash da senha
Backend->>Banco: Cria usuário com perfil ALUNO e status ATIVO
Banco-->>Backend: Confirma criação
Backend-->>BFF: Retorna cadastro realizado com sucesso
BFF-->>Frontend: Retorna cadastro realizado com sucesso
Frontend-->>Aluno: Redireciona para login ou área inicial
end
Processo de cadastro de professor
sequenceDiagram
actor Professor
participant Frontend
participant BFF
participant Backend as API Backend
participant Banco as Banco de Dados
Professor->>Frontend: Preenche formulário de cadastro
Frontend->>Frontend: Valida dados básicos
Frontend->>BFF: POST /api/v1/autenticacao/professores/cadastro
BFF->>Backend: POST /api/v1/autenticacao/professores/cadastro (X-Internal-Token)
Backend->>Backend: Valida email institucional e SIAPE
Backend->>Banco: Verifica email e SIAPE únicos
Banco-->>Backend: Retorna resultado da consulta
alt Dados inválidos ou duplicados
Backend-->>BFF: Retorna erro de validação ou conflito
BFF-->>Frontend: Retorna erro
Frontend-->>Professor: Exibe mensagem de erro
else Dados válidos
Backend->>Backend: Gera hash da senha
Backend->>Banco: Cria usuário com perfil PROFESSOR e status PENDENTE
Banco-->>Backend: Confirma criação
Backend-->>BFF: Retorna cadastro enviado para análise
BFF-->>Frontend: Retorna cadastro enviado para análise
Frontend-->>Professor: Redireciona para tela de cadastro em análise
end
Processo de login
sequenceDiagram
actor Usuario as Usuário
participant Frontend
participant BFF
participant Backend as API Backend
participant Banco as Banco de Dados
Usuario->>Frontend: Informa email e senha
Frontend->>BFF: POST /api/v1/autenticacao/login
BFF->>Backend: POST /api/v1/autenticacao/login (X-Internal-Token)
Backend->>Banco: Busca usuário por email
Banco-->>Backend: Retorna usuário encontrado ou vazio
alt Usuário não encontrado ou senha inválida
Backend-->>BFF: Retorna 401 NAO_AUTORIZADO
BFF-->>Frontend: Retorna 401
Frontend-->>Usuario: Exibe mensagem de credenciais inválidas
else Usuário INATIVO ou RECUSADO
Backend-->>BFF: Retorna 403 PROIBIDO
BFF-->>Frontend: Retorna 403
Frontend-->>Usuario: Exibe mensagem conforme status da conta
else Usuário ATIVO
Backend->>Backend: Gera token de acesso JWT
Backend->>Backend: Gera token de atualização
Backend->>Banco: Salva refresh token
Banco-->>Backend: Confirma persistência
Backend-->>BFF: Retorna tokens e dados do usuário
BFF-->>Frontend: Retorna tokens e dados do usuário
Frontend->>Frontend: Salva tokens e usuário no localStorage
Frontend-->>Usuario: Redireciona para área autenticada
end
Processo de autenticação com JWT em rota protegida
sequenceDiagram
actor Usuario as Usuário autenticado
participant Frontend
participant BFF
participant Backend as API Backend
participant Middleware as Middleware de Autenticação (Backend)
participant Banco as Banco de Dados
Usuario->>Frontend: Acessa funcionalidade protegida
Frontend->>BFF: Envia requisição com Bearer token
BFF->>BFF: Valida assinatura/expiração do JWT
alt JWT inválido ou ausente
BFF-->>Frontend: 401 NAO_AUTORIZADO
Frontend-->>Usuario: Redireciona para login
else JWT válido no BFF
BFF->>Backend: Repassa com Bearer + X-Internal-Token + X-User-*
Backend->>Middleware: Encaminha requisição
Middleware->>Middleware: Verifica X-Internal-Token e revalida JWT
Middleware->>Banco: Busca usuário e revalida status atual
Banco-->>Middleware: Retorna usuário
alt Usuário não está ATIVO
Middleware-->>Backend: 403 PROIBIDO
Backend-->>BFF: 403 PROIBIDO
BFF-->>Frontend: 403 PROIBIDO
Frontend-->>Usuario: Bloqueia acesso
else Usuário autorizado
Middleware->>Backend: Libera requisição
Backend-->>BFF: Retorna recurso solicitado
BFF-->>Frontend: Retorna recurso solicitado
Frontend-->>Usuario: Exibe conteúdo protegido
end
end
Processo de atualização de token
sequenceDiagram
actor Usuario as Usuário autenticado
participant Frontend
participant BFF
participant Backend as API Backend
participant Banco as Banco de Dados
Frontend->>BFF: POST /api/v1/autenticacao/atualizar-token
BFF->>Backend: POST /api/v1/autenticacao/atualizar-token (X-Internal-Token)
Backend->>Banco: Verifica refresh token atual
Banco-->>Backend: Retorna token encontrado
alt Refresh token inválido, expirado ou revogado
Backend-->>BFF: Retorna 401 NAO_AUTORIZADO
BFF-->>Frontend: Retorna 401
Frontend-->>Usuario: Redireciona para login
else Refresh token válido
Backend->>Backend: Gera novo access token
Backend->>Backend: Gera novo refresh token
Backend->>Banco: Remove ou revoga refresh token antigo
Backend->>Banco: Salva novo refresh token
Banco-->>Backend: Confirma atualização
Backend-->>BFF: Retorna novos tokens
BFF-->>Frontend: Retorna novos tokens
Frontend->>Frontend: Atualiza tokens no localStorage
end
Processo de logout
sequenceDiagram
actor Usuario as Usuário autenticado
participant Frontend
participant BFF
participant Backend as API Backend
participant Banco as Banco de Dados
Usuario->>Frontend: Clica em sair
Frontend->>BFF: POST /api/v1/autenticacao/sair (Bearer)
BFF->>BFF: Valida JWT
BFF->>Backend: POST /api/v1/autenticacao/sair (X-Internal-Token)
Backend->>Banco: Invalida refresh token
Banco-->>Backend: Confirma invalidação
Backend-->>BFF: Retorna sucesso
BFF-->>Frontend: Retorna sucesso
Frontend->>Frontend: Remove tokens e usuário do localStorage
Frontend-->>Usuario: Redireciona para login
Processo de aprovação de professor pelo administrador
sequenceDiagram
actor Administrador
participant Frontend
participant BFF
participant Backend as API Backend
participant Banco as Banco de Dados
Administrador->>Frontend: Acessa painel de usuários
Frontend->>BFF: GET /api/v1/admin/usuarios?status=PENDENTE
BFF->>BFF: Valida JWT
BFF->>Backend: GET /api/v1/admin/usuarios?status=PENDENTE (X-Internal-Token)
Backend->>Banco: Consulta usuários pendentes
Banco-->>Backend: Retorna professores pendentes
Backend-->>BFF: Retorna lista paginada
BFF-->>Frontend: Retorna lista paginada
Frontend-->>Administrador: Exibe usuários aguardando aprovação
Administrador->>Frontend: Aprova professor
Frontend->>BFF: PATCH /api/v1/admin/usuarios/:id/status
BFF->>Backend: PATCH /api/v1/admin/usuarios/:id/status (X-Internal-Token)
Backend->>Backend: Verifica perfil ADMINISTRADOR
Backend->>Banco: Atualiza status para ATIVO
Banco-->>Backend: Confirma atualização
Backend-->>BFF: Retorna usuário atualizado
BFF-->>Frontend: Retorna usuário atualizado
Frontend-->>Administrador: Atualiza lista e exibe confirmação
Observações arquiteturais
O frontend não acessa diretamente o backend nem o banco de dados; toda chamada passa pelo BFF.
O BFF não tem regras de negócio — é proxy 100% orquestração: valida JWT, injeta X-Internal-Token e cabeçalhos auxiliares (X-User-Id, X-User-Profile, X-User-Status) e repassa.
Toda regra de autenticação, autorização e persistência permanece no backend.
O access token é usado para autenticar requisições protegidas. O JWT é validado em duas camadas (BFF e Backend) — defesa em profundidade.
O refresh token é persistido no banco e utilizado para renovação de sessão.
O status do usuário deve ser revalidado no backend a cada requisição protegida.
Usuários com status diferente de ATIVO não devem acessar funcionalidades autenticadas.
Histórico de Versão
| Data | Versão | Descrição | Autor(es) |
|---|---|---|---|
| 26/04/2026 | 1.0 | 1.0 Criação da visão de processos da arquitetura | Breno Fernandes |
| 05/05/2026 | 1.1 | Atualização de todos os diagramas para incluir o BFF como ator intermediário entre Frontend e Backend (PRD: Migração para Arquitetura com BFF) | Miguel Moreira |