Flowchart — Módulo: musicas
Gerado pelo Archaeologist (Reversa) em 2026-05-11
Fluxo Geral do Módulo
flowchart TD
A([Usuário acessa lista de músicas]) --> B{Filtro ativo?}
B -- Livro selecionado --> C[findAllBy com id_edicao_livro]
B -- Nenhum livro --> C
C --> D{Termo de busca?}
D -- Não --> E[semTermo: ORDER BY titulo/ordem]
D -- É número --> F[porIndice: WHERE indice = ?]
D -- É texto --> G[getDetalhesTermoBusca]
G --> H[NFKD normalize → remove não-alfanumérico → insere * entre palavras]
H --> I[FTS5 MATCH ? ORDER BY bm25 50/5]
E & F & I --> J[LIMIT n+1 para detectar hasNextPage]
J --> K[Retorna lista paginada + hasNextPage]
K --> L([Renderiza lista de músicas])
Fluxo: getDetalhesTermoBusca
flowchart TD
A([termoBusca]) --> B{É número inteiro?}
B -- Sim --> C([Tipo: índice | valor: parseInt])
B -- Não --> D[NFKD normalize + toUpperCase]
D --> E[replace não-alfanumérico por espaço]
E --> F[trim + split por espaço]
F --> G[Cada token: adiciona * no final]
G --> H[Join com espaço]
H --> I[Remove ** duplos]
I --> J([Tipo: texto | valor: query FTS5])
Fluxo: Carregamento de uma música
flowchart TD
A([carregarMusica dispatch]) --> B{id_musica já está no store?}
B -- Sim --> C([Retorna do cache])
B -- Não --> D[MusicasRepository.findById]
D --> E[SELECT musica JOIN cantico_livro JOIN edicao_livro]
E --> F[Mapeia para InformacoesDetalhadasMusica]
F --> G[Redux: upsertOne no entityAdapter]
G --> H([Renderiza tela de música])
Fluxo: Favoritar / Desfavoritar Música
flowchart TD
A([setFavorita dispatch]) --> B[MusicasFavoritasRepository.update]
B --> C{Operação OK?}
C -- Sim --> D[Metricas.favoritarMusica / desfavoritarMusica]
D --> E[Redux store NÃO atualizado aqui]
C -- Erro --> F([Toast de erro])
Fluxo: Marcar como Visualizada
flowchart TD
A([marcarMusicaComoVisualizada dispatch]) --> B[MusicasFavoritasRepository.marcarAsVisualizada]
B --> C[Metricas.visualizarMusica]
C --> D[Repertorio padrão 'Visto recentemente': addItem]
D --> E([Concluído — não bloqueia UI])
Rótulos: DicionarioRotulos
flowchart LR
A([string de rótulo]) --> B{Pertence a qual categoria?}
B --> C1[Momento da Missa]
B --> C2[Tempo Litúrgico]
B --> C3[Semana Santa]
B --> C4[Solenidade]
B --> C5[Festa]
B --> C6[Sacramento]
B --> C7[Outro]
B --> C8[Outro Rito ou Momento]
B --> C_unk[Desconhecido]
C1 & C2 & C3 & C4 & C5 & C6 & C7 & C8 & C_unk --> D([RotulosPorCategoriaBuilder.build])