Conversation
…imorficos (S1-05/06/07/10) Adiciona a camada de aplicacao ainda inexistente para a hierarquia do backlog (epico -> feature -> PBI), que ate agora so existia como schema de banco. Cada nivel ganha API REST completa (criacao em rascunho, edicao, conclusao condicionada aos campos obrigatorios do guia) seguindo o padrao arquitetural ja estabelecido pelo modulo de projetos (SQL parametrizado via pg, Zod na borda, auditoria transacional, node:test). - epicos (S1-05): titulo/descricao/objetivo/escopo_macro/resultado_esperado, bloqueia cadastro em projeto arquivado ou inexistente, conclusao exige os cinco campos do guia e ao menos um criterio de aceitacao. - features (S1-06): vinculo obrigatorio ao epico, contexto navegavel (expoe epico_titulo/projeto_id), conclusao exige descricao e objetivo. - PBIs (S1-07): historia em tres campos distintos (COMO UM/EU QUERO/PARA QUE), codigo provisorio gerado automaticamente por sequencia dentro da feature, conclusao exige ao menos um cenario de aceitacao. - criterios de aceitacao (S1-10): tabela unica polimorfica por entidade_tipo, texto simples ordenado para epico/feature e cenario nomeado DADO/QUANDO/ ENTAO para PBI, remocao reordena os demais da mesma entidade. - migration 005: colunas e constraints novas em epico/feature/pbi/ criterio_aceitacao, sem alterar volumes existentes. - move AppError/NotFoundError/ConflictError/ValidationError de projects.service.ts para shared/errors.ts, ja que o error handler global nao deveria depender de um modulo de negocio especifico. - frontend: telas de listagem/criacao/detalhe para epico, feature e PBI, reaproveitando os componentes visuais existentes de projects.css; rotas aninhadas em /projects/:id/epics/:id/features/:id/pbis/:id. - openapi.yaml documenta os 13 endpoints novos. 95 testes de backend (node:test) e 49 de frontend (vitest) passando; typecheck e build de ambos os lados limpos. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
O que foi feito?
Implementa a camada de aplicação que faltava para a hierarquia do backlog (Épico → Feature →
PBI), que até então só existia como schema de banco (
database/init.sql). O projeto só tinhaautheprojectsimplementados. Este PR fecha quatro tasks da print 1 de uma vez porqueelas são mutuamente dependentes: S1-10 (critérios) precisa de S1-05/06/07 existindo para ser
demonstrável, e por isso entram juntas neste PR.
Cada nível segue exatamente o padrão arquitetural já estabelecido pelo módulo
projects: SQLparametrizado via
pg(sem ORM), validação com Zod na borda, auditoria transacional em todaescrita, e testes com o runner nativo
node:test.Alterações técnicas
[S1-05] Épicos - API e regras de cadastro/conclusão
backend/src/modules/epics/(novo módulo completo - types, repository, service,controller, routes + testes de service e de rota HTTP):
titulo,descricao,objetivo,escopo_macro,resultado_esperado,prioridade(Must/Should/Could)status: "rascunho", mesmo com todos os campos preenchidos(Cenário 1 do PBI-01.1.2)
PATCH /epics/:id/completebloqueia a conclusão listando os campos faltantes(
campos_faltantes) quando faltar qualquer um dos 5 campos do guia ou não houver nenhumcritério de aceitação vinculado (Cenário 3 - a regra do guia inclui "critérios de aceitação"
como campo obrigatório do épico)
frontend/src/backlog/Epics.tsx: lista de épicos do projeto, formulário de criação,tela de detalhe com botão "Marcar como concluído" que exibe os campos faltantes em português
quando a API recusa.
[S1-06] Features - vínculo obrigatório ao épico e contexto navegável
backend/src/modules/features/(novo módulo completo):titulo,descricao,objetivoGET /features/:idsempre retornaepico_tituloeprojeto_idjunto — o contrato járesolve o Cenário 2 do PBI-01.1.3 ("exibir a qual épico ela pertence, com acesso ao épico de
origem") sem exigir uma segunda chamada do frontend
epico_idválido (400 se ausente/malformado, 404 se o épico não existir)descricaoeobjetivopreenchidosfrontend/src/backlog/Features.tsx: mesmo padrão do épico, com breadcrumb "Épico: <título>"e botão para voltar ao épico de origem.
[S1-07] PBIs - história em três campos e código provisório
backend/src/modules/pbis/(novo módulo completo):historia_como_um,historia_eu_quero,historia_para_que— trêscampos de banco distintos, cada um obrigatório individualmente (não é um textarea único)
codigogerado automaticamente pelo sistema (PBI-001,PBI-002, ...), sequencial porfeature - nunca aceito do cliente, satisfazendo "código provisório" do card
GET /pbis/:idretorna a cadeia completa (feature_titulo,epico_id,epico_titulo,projeto_id) para navegação de contextofrontend/src/backlog/Pbis.tsx: formulário com os três campos de história visualmentedistintos (cenário 2 do PBI-01.1.4), lista e detalhe com o código gerado.
[S1-10] Critérios de aceitação polimórficos
backend/src/modules/criteria/(novo módulo, apenas Backend + Banco, sem tela própriacriterio_aceitacao) atende épico, feature e PBI viaentidade_tipo+entidade_idtextolivre. PBI: cenário nomeado comnome,dado,quando,entaoordempersistida)DELETE /criteria/:idremove e reordena os demais da mesma entidade transacionalmente(Cenário 3 do PBI-01.2.1)
database/migrations/005_backlog_hierarchy_domain.sql(novo):descricao/resultado_esperado/statusemepico,descricao/statusemfeature,statusempbi(todos comCHECKeDEFAULT 'rascunho', sem quebrar volumesexistentes)
nomeeordememcriterio_aceitacao,CHECKdeentidade_tipo, e índice único(entidade_tipo, entidade_id, ordem)Ajustes transversais
backend/src/shared/errors.ts(novo):AppError/NotFoundError/ConflictError/ValidationErrorforam movidas deprojects.service.tspara um local compartilhado - oerrorHandlerglobal não deveria depender de um módulo de negócio específico, e os quatromódulos novos precisavam importar as mesmas classes.
requireRole.ts: mensagem de 403 generalizada ("Seu perfil não permite realizar estaoperação") em vez do texto fixo "não permite alterar projetos", já que o middleware agora é
reusado por 4 módulos novos.
docs/api/openapi.yaml: os 13 endpoints novos documentados (épicos, features, PBIs,critérios), com schemas de request/response e os códigos de erro relevantes.
Como validar