IT1 — Diagramas de Sequência Formais
Para cada feature entregue na IT1 — Vitrine Pública: o diagrama de sequência formal (Mermaid, renderizado na página) e o feature card final — o estado pós-implementação, com os critérios de aceite atendidos. Os detalhes completos de cada feature (evidências, validação do cliente) ficam na página específica da feature.
CP5 — Painel de Gerenciamento do Administrador
Issues: #54 · RFs cobertos: RF08, RF09 · RNFs cobertos: RNF01, RNF03
| Critério (BDD) | RF / RNF | Status |
|---|---|---|
Login com credenciais válidas → Supabase Auth gera sessão JWT → redirect /admin/dashboard | RF08 | ✅ |
| MFA ativo → código TOTP solicitado antes de emitir sessão | RF08 · RNF08 | ✅ |
| Credenciais inválidas → 401 + mensagem genérica sem expor detalhes internos | RF08 | ✅ |
Logout → signOut() + invalida refresh_token + limpa cookie + redirect /admin/login | RF09 | ✅ |
Acesso a /admin sem sessão → redirect /admin/login sem renderizar dados do painel | RF09 · RNF01 | ✅ |
| Tempo de autenticação ≤ 2s | RNF03 | ✅ |
Issues: #57 · RFs cobertos: RF10 · RNFs cobertos: RNF01, RNF03, RNF09
| Critério (BDD) | RF / RNF | Status |
|---|---|---|
JWT válido com role = owner → RLS filtra por auth.uid() + auth.role() → painel renderizado sem reload | RF10 · RNF09 | ✅ |
JWT expirado → refreshSession() tentado; se falhar, redirect /admin/login sem renderizar dados | RF10 | ✅ |
Token inválido ou sem role = owner → 401/403 + redirect /admin/login sem expor estrutura | RF10 · RNF01 | ✅ |
| Operação no painel → resposta entregue em ≤ 2s em condições normais | RNF03 | ✅ |
Issues: #58 · RFs cobertos: RF11, RF12, RF13, RF14 · RNFs cobertos: RNF03, RNF09
| Critério (BDD) | RF / RNF | Status |
|---|---|---|
Owner cadastra novo membro → createUser() + insert em profiles → lista atualizada sem reload | RF12 | ✅ |
| Email duplicado → erro informativo sem criar registro duplicado | RF12 | ✅ |
Owner edita dados de membro → RLS valida role = owner → persiste sem reload | RF11 · RNF09 | ✅ |
Edição sem role = owner → bloqueio 403 pelo RLS sem persistir nada | RF11 · RNF09 | ✅ |
Owner inativa membro → active = false + lista atualizada sem reload | RF13 | ✅ |
| Owner tenta inativar a própria conta → operação bloqueada com mensagem de erro | RF13 | ✅ |
Owner remove membro → deleteUser() + remoção de profiles → lista atualizada sem reload | RF14 | ✅ |
| Owner tenta remover a própria conta → bloqueado (ao menos um owner ativo garantido) | RF14 | ✅ |
CP4 — Vitrine Pública de Produtos SaaS
Issues: #55 · RFs cobertos: RF21, RF22, RF23 · RNFs cobertos: RNF02, RNF21
| Critério (BDD) | RF / RNF | Status |
|---|---|---|
| Admin cadastra produto → persistido em transação ACID → apto para publicação | RF21 | ✅ |
| Admin edita produto → dados substituídos no banco sem intervenção de dev | RF22 | ✅ |
| Admin remove produto → excluído do catálogo e ausente na vitrine imediatamente | RF23 | ✅ |
| Requisição sem autorização → 401/403 sem executar operação no banco | RF21–23 · RNF01 | ✅ |
Vitrine pública renderiza via SSR → apenas published = true em ≤ 2s sem JS | RNF02 · RNF21 | ✅ |
Issues: #56 · RFs cobertos: RF25, RF26 · RNFs cobertos: RNF03
| Critério (BDD) | RF / RNF | Status |
|---|---|---|
Admin aciona toggle para publicar → published = true + confirmação visual em ≤ 2s | RF25 · RNF03 | ✅ |
| Admin aciona toggle para despublicar → produto ocultado da vitrine, dados preservados no banco | RF26 · RNF03 | ✅ |
| Credenciais inválidas no toggle → API rejeita → toggle revertido + mensagem de erro | RF25 · RF26 | ✅ |
Issues: #61 · RFs cobertos: RF27 · RNFs cobertos: RNF10
| Critério (BDD) | RF / RNF | Status |
|---|---|---|
| Formulário válido → persistido em transação ACID → alerta de sucesso em ≤ 2s | RF27 · RNF02 | ✅ |
| Rate limit excedido (5 req/IP/10min) → 429 + "Tente novamente mais tarde" | RNF10 | ✅ |
Issues: #63 · RFs cobertos: RF28 · RNFs cobertos: RNF02, RNF21
| Critério (BDD) | RF / RNF | Status |
|---|---|---|
Visitante acessa /sobre → SSR carrega i18n estático em ≤ 2s sem chamada a API ou banco | RF54 · RNF02 · RNF04 | ✅ |
Visitante clica "EN" → textos trocam para en/about.json em ≤ 1 clique sem reload | RNF13 | ✅ |
| Bot de indexação → HTML inicial com h1, textos e metadados Open Graph sem depender de JS | RNF04 · RNF21 | ✅ |
| Visitante sem autenticação → nenhum guard intercepta → conteúdo exibido normalmente | RN27 | ✅ |
CP6 — FAQ e Base de Conhecimentos por Produto
Issues: #59 · RFs cobertos: RF30, RF29, RF30, RF31 · RNFs cobertos: RNF01, RNF04, RNF05
| Critério (BDD) | RF / RNF | Status |
|---|---|---|
| Admin cadastra artigo (título, conteúdo, produto, categoria) → persistido e apto para publicação | RF28 · RNF01 | ✅ |
| Admin edita artigo → dados substituídos, ID original preservado | RF29 | ✅ |
| Admin remove artigo → excluído do banco e ausente na vitrine imediatamente | RF30 | ✅ |
Admin categoriza artigo → vínculos product_id + category_id com integridade referencial | RF31 | ✅ |
| Agente externo forja requisição sem token → RLS bloqueia com 403 sem alterar dados | RNF01 · RNF09 | ✅ |
| Artigos publicados → conteúdo no SSR indexável; despublicados ausentes da resposta SSR | RNF04 · RNF05 | ✅ |
Issues: #60 · RFs cobertos: RF34, RF33 · RNFs cobertos: RNF01, RNF04, RNF05
| Critério (BDD) | RF / RNF | Status |
|---|---|---|
Admin publica artigo → published = true → visível na próxima requisição da vitrine sem reload | RF32 · RNF01 | ✅ |
| Admin despublica artigo → artigo ausente da vitrine imediatamente, conteúdo preservado no banco | RF33 | ✅ |
| Agente externo forja requisição sem token → RLS bloqueia com 403 sem alterar status | RNF01 · RNF09 | ✅ |
| Artigo publicado → conteúdo e metadados SEO no HTML inicial sem depender de JS | RNF04 · RNF05 | ✅ |
Issues: #62 · RFs cobertos: RF34 · RNFs cobertos: RNF02, RNF04, RNF05
| Critério (BDD) | RF / RNF | Status |
|---|---|---|
| Visitante clica "Útil" ou "Não Útil" → avaliação persistida anonimamente + feedback visual em ≤ 2s | RF34 · RNF02 | ✅ |
| Visitante já avaliou o artigo na sessão → interface bloqueia sem chamar a API | RF34 | ✅ |
session_hash já existe no banco para o artigo → backend retorna 409 sem registrar duplicata | RF34 | ✅ |
| Componente de avaliação presente → SSR não bloqueado nem degradado | RNF04 · RNF05 | ✅ |