Repertórios — Tarefas de Implementação
Gerado pelo Writer (Reversa) em 2026-05-11
doc_level: detalhado
Camada: Dados
| ID |
Tarefa |
Arquivo de origem |
Critério de pronto |
Confiança |
| T-01 |
Garantir schema SQL com CHECK length(titulo) <= 50 e length(termo) <= 300 |
src/arch/persistence/migration/ (migration v8) |
Migration v8 executada; violações lançam erro SQL |
🟢 |
| T-02 |
Implementar findAllBy() retornando apenas repertórios com data_exclusao IS NULL |
RepertoriosRepository.ts |
Repertórios excluídos não aparecem na lista |
🟢 |
| T-03 |
Implementar createRepertorio(titulo) com ordem_musicas = '[]' e tipo_repertorio = 0 |
RepertoriosRepository.ts |
INSERT retorna id_repertorio; tipo_repertorio padrão é 0 |
🟢 |
| T-04 |
Implementar deactivateRepertorio(id) com guard: tipo_repertorio != 1 |
RepertoriosRepository.ts |
Repertórios padrão (id=1, id=2) rejeitam soft-delete com erro explícito |
🟢 |
| T-05 |
Implementar updateOrdemMusicas(id_repertorio, ordem: number[]) serializando para JSON |
RepertoriosRepository.ts |
ordem_musicas reflete a nova ordem após UPDATE |
🟢 |
| T-06 |
Implementar createItemRepertorio aceitando { id_musica?, termo?, momento?, tonalidade? } |
RepertoriosRepository.ts |
Item criado com id_musica OU termo, nunca ambos vazios |
🟢 |
| T-07 |
Implementar trim automático de momento e tonalidade antes do UPDATE |
RepertoriosRepository.ts |
Valores com espaços nas extremidades são persistidos sem espaços |
🟢 |
| T-08 |
Implementar findRepertorioSimilar(slug) para importação: busca local por slug_referencia ou slug_corrente |
src/service/RepertorioService.ts |
Retorna id local se já existe; evita duplicação por importação repetida |
🟢 |
Camada: Serviços
| ID |
Tarefa |
Arquivo de origem |
Critério de pronto |
Confiança |
| T-09 |
Implementar gerarMensagemCompartilhamento(repertorio, itens, url) |
src/service/RepertorioService.ts |
Mensagem contém título, metadata pt-BR, itens em Markdown WhatsApp e URL |
🟢 |
| T-10 |
Implementar CompartilharService.getToken() com fallback para Auth.autenticar() |
src/service/CompartilharService.ts |
Token válido retornado; se usuário cancela auth, fluxo é abortado com Toast |
🟢 |
| T-11 |
Implementar CompartilharService.repertorio(id) com POST/PUT à API e update do slug.corrente |
src/service/CompartilharService.ts |
slug.corrente atualizado localmente após resposta da API |
🟢 |
| T-12 |
Implementar FolhetoService com as 3 estratégias: ComSlug, Base64, Noop |
src/service/FolhetoService.ts |
Cada estratégia abre a URL correta; Noop não causa erro |
🟢 |
| T-13 |
Implementar Base64Unicode.encode(query) para serialização do repertório sem autenticação |
src/service/FolhetoService.ts ou util |
URL gerada é acessível em livreto.canta.app/?repertorio=<base64> |
🟢 |
Camada: Store (Redux)
| ID |
Tarefa |
Arquivo de origem |
Critério de pronto |
Confiança |
| T-14 |
Implementar thunk criarRepertorio(titulo) com despacho de Metricas.repertorioCriado() |
src/store/Repertorios/Repertorios.action.ts |
Store atualizado; métrica registrada; Toast de sucesso exibido |
🟢 |
| T-15 |
Implementar thunk desativarRepertorio(id) com verificação de tipo_repertorio |
src/store/Repertorios/Repertorios.action.ts |
Repertório removido do store; erro explícito se tipo_repertorio = 1 |
🟢 |
| T-16 |
Implementar thunk duplicarRepertorio(id) com slug undefined e despacho de métrica |
src/store/Repertorios/Repertorios.action.ts |
Nova cópia no store sem slug; Metricas.repertorioDuplicado() chamado |
🟢 |
| T-17 |
Implementar thunk compartilharRepertorio(id) integrando CompartilharService e Share.share |
src/store/Repertorios/Repertorios.action.ts |
Dialog nativo abre com mensagem Markdown; erro de rede exibe Toast |
🟢 |
| T-18 |
Implementar thunk importarRepertorioPorSlug(slug) com deduplicação local |
src/store/Repertorios/Repertorios.action.ts |
Repertório importado aparece no store; slug já existente redireciona sem duplicar |
🟢 |
Camada: UI (Views)
| ID |
Tarefa |
Arquivo de origem |
Critério de pronto |
Confiança |
| T-19 |
Implementar tela de lista de repertórios com suporte a criar, editar e excluir |
src/view/screen/repertorio/ |
CRUD refletido em tempo real no store; repertórios padrão exibidos mas protegidos |
🟢 |
| T-20 |
Implementar tela de detalhe do repertório com lista de itens e ações por item |
src/view/screen/repertorio/ |
Itens exibidos na ordem de ordem_musicas; botões de edição/remoção funcionais |
🟢 |
| T-21 |
Implementar campos editáveis de momento e tonalidade com sugestões de histórico |
src/view/fragment/ |
AutoComplete exibe últimos valores usados; trim aplicado ao salvar |
🟡 |
| T-22 |
Exibir sigla e índice do livro ao lado da música no detalhe do repertório |
src/view/screen/repertorio/ |
Sigla e índice visíveis se a música tem livro associado |
🟢 |
| T-23 |
Desabilitar botão de reordenação na UI (DT-08 ativo) |
src/view/screen/repertorio/ |
Botão de reordenação ausente ou visualmente desabilitado |
🟢 |