Compartilhar Repertório — Requisitos
Gerado pelo Writer (Reversa) em 2026-05-11 Caso de uso do módulo
repertorios
Visão Geral
Permite ao usuário enviar um repertório para a API Canta.app e compartilhá-lo via dialog nativo do sistema operacional (WhatsApp, e-mail, etc.) com uma mensagem formatada em Markdown.
Regras de Negócio
- Compartilhar requer autenticação Google — o fluxo OAuth é iniciado automaticamente se o usuário não estiver logado 🟢
- A mensagem gerada usa Markdown compatível com WhatsApp:
*negrito*,_itálico_,`código`🟢 - O
slug.correnteé atualizado localmente após resposta da API 🟢 - Falha de rede exibe Toast "sem internet"; não altera
slug.corrente🟢 - Cancelamento do OAuth aborta o fluxo sem mensagem de erro (retorno silencioso) 🟢
- A mensagem inclui metadados de data e dia litúrgico quando presentes nos metadados do repertório 🟢
Requisitos Funcionais
| ID | Requisito | Prioridade | Critério de Aceite |
|---|---|---|---|
| RF-01 | Autenticar usuário via Google OAuth se necessário | Must | Bearer JWT obtido; fluxo continua; cancelamento aborta sem erro visível |
| RF-02 | Enviar repertório à API (POST se novo, PUT se já tem slug) | Must | API recebe os dados; resposta contém conta.slug e slug |
| RF-03 | Atualizar slug.corrente localmente após resposta da API |
Must | slug_corrente atualizado no banco e no store |
| RF-04 | Gerar mensagem Markdown com título, itens e URL | Must | Mensagem contém título, metadata, itens formatados e URL canta.app/repertorios/?conta:slug |
| RF-05 | Abrir dialog nativo de compartilhamento do SO | Must | Dialog aparece com a mensagem pré-preenchida |
| RF-06 | Registrar métrica de compartilhamento no Sentry | Should | Metricas.compartilharRepertorio() chamado após dialog aberto |
| RF-07 | Exibir Toast em caso de erro de rede | Must | Toast "sem internet" exibido; slug.corrente não alterado |
Critérios de Aceitação
Dado que o usuário não está logado e aciona compartilhar
Quando o fluxo OAuth Google é iniciado e completado
Então o repertório é enviado à API e o dialog de compartilhamento abre
Dado que o usuário cancela o fluxo OAuth
Quando o dialog é fechado sem completar
Então o compartilhamento é abortado e nenhum Toast de erro é exibido
Dado que o usuário compartilha com sucesso
Quando a API retorna conta.slug e slug
Então slug_corrente é atualizado localmente e o dialog nativo abre com a mensagem
Dado que há falha de rede durante o compartilhamento
Quando a API retorna erro de conexão
Então um Toast "sem internet" é exibido e slug_corrente não é alterado