55 lines
2.8 KiB
Markdown
55 lines
2.8 KiB
Markdown
# FightRate — Sensor contínuo e histórico geral
|
|
|
|
## Objetivo
|
|
Separar claramente três conceitos:
|
|
|
|
1. **Sensor**: descobrir, mostrar disponibilidade e permitir conexão ao sensor BLE.
|
|
2. **Monitoramento contínuo**: depois de conectado, receber, mostrar e salvar BPM real o tempo todo no app.
|
|
3. **Janela de treino**: ação disponível somente em Captura; marca um intervalo dentro do fluxo contínuo para destaque no histórico.
|
|
|
|
## Critérios de sucesso
|
|
- A tela Sensor não mostra botão de abrir/iniciar janela de treino.
|
|
- A tela Sensor mostra se o sensor está disponível/conectado e permite conectar/desconectar/monitorar pelo fluxo de sensor.
|
|
- Conectar o sensor inicia o recebimento contínuo via serviço nativo e os dados alimentam Captura, Sensor, Histórico e Insights.
|
|
- A janela de treino continua existindo apenas na tela Captura e não interrompe o monitoramento ao fechar.
|
|
- Histórico mantém a lista de janelas de treino e adiciona uma visão de **uso total** baseada em `continuous_heart_rate_samples`.
|
|
- O histórico geral não usa dados falsos: se não houver amostras contínuas, mostra estado vazio honesto.
|
|
- BLE services/characteristics ficam mais legíveis, com hierarquia compacta e sem espaçamento excessivo.
|
|
- Código visível ao usuário em PT-BR; identificadores em inglês.
|
|
|
|
## Arquitetura recomendada
|
|
- Reusar `FightRateCaptureStore` como fonte local-first.
|
|
- Reusar `continuous_heart_rate_samples` como verdade para histórico geral.
|
|
- Criar uma pequena camada de domínio TS para agrupar amostras contínuas em blocos de uso por lacunas de tempo. Essa lógica é pura e testável.
|
|
- Expor do módulo nativo um método de leitura paginada/resumida das amostras contínuas, sem mudar o contrato BLE.
|
|
- Manter `workout_sessions` apenas para janelas destacadas.
|
|
|
|
## Responsabilidades
|
|
### Reusar
|
|
- `useHeartRateMonitor`: estado app-wide recebido do módulo nativo.
|
|
- `TrainingChart`: gráfico real e interativo com amostras timestampadas.
|
|
- `FightRateCaptureStore`: persistência SQLite local.
|
|
- `HistoryScreen`: entrada natural para alternar entre janelas e uso total.
|
|
|
|
### Criar/alterar
|
|
- `src/training/continuousUsage.ts`: agrupar amostras contínuas em blocos de uso e sumarizar BPM/duração.
|
|
- Teste Jest para `continuousUsage`.
|
|
- API nativa `getContinuousSamples(limit?)`.
|
|
- Wrapper TS para `getContinuousSamples`.
|
|
- UI de Histórico com seção/alternância para “Janelas” e “Uso total”.
|
|
- UI de Sensor sem ação de treino e com diagnóstico BLE mais claro.
|
|
|
|
## Fora de escopo
|
|
- Não trocar biblioteca BLE.
|
|
- Não adicionar dependências.
|
|
- Não mudar o design aprovado fora dos pontos pedidos.
|
|
- Não criar dados demo/fake.
|
|
- Não mexer no app Android legado.
|
|
|
|
## Verificação
|
|
- `npm run typecheck`
|
|
- `npm run lint`
|
|
- `npm test -- --runInBand`
|
|
- `npm audit --audit-level=moderate`
|
|
- `./gradlew assembleRelease -PreactNativeArchitectures=arm64-v8a`
|