mirror of
https://github.com/lucasrcsantana/story-generator.git
synced 2025-12-16 13:27:52 +00:00
docs: adiciona documentação completa do banco de dados - Documenta estrutura atual do Supabase - Adiciona diagramas ER e relacionamentos - Inclui pol��ticas de seguran��a e ��ndices - Documenta triggers e fun����es
Some checks failed
Docker Build and Push / build (push) Has been cancelled
Some checks failed
Docker Build and Push / build (push) Has been cancelled
This commit is contained in:
parent
94835a427b
commit
d35565dee4
15
CHANGELOG.md
15
CHANGELOG.md
@ -120,6 +120,17 @@ e este projeto adere ao [Semantic Versioning](https://semver.org/lang/pt-BR/).
|
||||
- Timer de gravação no Modo Foco
|
||||
- Transições suaves entre modos
|
||||
- Controles flutuantes durante o Modo Foco
|
||||
- Documentação completa da estrutura do banco de dados em `/docs/banco-dados.md`:
|
||||
- Escolas e Classes
|
||||
- Sistema de Alunos
|
||||
- Histórias
|
||||
- Interesses
|
||||
- Sistema de Conquistas
|
||||
- Sistema Fonético completo
|
||||
- Relacionamentos e índices
|
||||
- Políticas de segurança
|
||||
- Triggers e funções
|
||||
- Considerações de performance
|
||||
|
||||
### Modificado
|
||||
- Componente AudioRecorder atualizado para suportar Modo Foco
|
||||
@ -133,3 +144,7 @@ e este projeto adere ao [Semantic Versioning](https://semver.org/lang/pt-BR/).
|
||||
- Callbacks de início e fim de gravação
|
||||
- Sistema de transição entre modos normal e foco
|
||||
- Otimização de performance para transições suaves
|
||||
- Atualização das definições de tabelas para refletir a estrutura atual do Supabase
|
||||
- Adição de diagramas ER para visualização dos relacionamentos
|
||||
- Documentação de índices e políticas de segurança
|
||||
- Inclusão de considerações de performance e backup
|
||||
|
||||
315
docs/banco-dados.md
Normal file
315
docs/banco-dados.md
Normal file
@ -0,0 +1,315 @@
|
||||
# Estrutura do Banco de Dados
|
||||
|
||||
## Visão Geral
|
||||
O banco de dados foi projetado para suportar um sistema educacional de leitura, geração de histórias e exercícios fonéticos, com foco em rastreamento de progresso e gamificação.
|
||||
|
||||
## Entidades
|
||||
|
||||
### 1. Escolas e Classes
|
||||
```sql
|
||||
create table schools (
|
||||
id uuid primary key default uuid_generate_v4(),
|
||||
name text not null,
|
||||
address text,
|
||||
phone text,
|
||||
email text,
|
||||
director_name text,
|
||||
created_at timestamptz default now(),
|
||||
updated_at timestamptz default now()
|
||||
);
|
||||
|
||||
create table classes (
|
||||
id uuid primary key default uuid_generate_v4(),
|
||||
school_id uuid references schools(id),
|
||||
teacher_id uuid references users(id),
|
||||
name text not null,
|
||||
grade text,
|
||||
year integer,
|
||||
period text,
|
||||
created_at timestamptz default now(),
|
||||
updated_at timestamptz default now()
|
||||
);
|
||||
|
||||
create table students (
|
||||
id uuid primary key default uuid_generate_v4(),
|
||||
user_id uuid references users(id),
|
||||
class_id uuid references classes(id),
|
||||
reading_level text,
|
||||
birth_date date,
|
||||
active boolean default true,
|
||||
created_at timestamptz default now(),
|
||||
updated_at timestamptz default now()
|
||||
);
|
||||
```
|
||||
|
||||
### 2. Histórias
|
||||
```sql
|
||||
create table stories (
|
||||
id uuid primary key default uuid_generate_v4(),
|
||||
student_id uuid references users(id),
|
||||
title text not null,
|
||||
content jsonb not null,
|
||||
status text,
|
||||
theme_id uuid,
|
||||
subject_id uuid,
|
||||
character_id uuid,
|
||||
setting_id uuid,
|
||||
created_at timestamptz default now(),
|
||||
updated_at timestamptz default now()
|
||||
);
|
||||
```
|
||||
|
||||
### 3. Interesses
|
||||
```sql
|
||||
create table interests (
|
||||
id uuid primary key default uuid_generate_v4(),
|
||||
student_id uuid references users(id),
|
||||
category text not null,
|
||||
item text not null,
|
||||
created_at timestamptz default now(),
|
||||
updated_at timestamptz default now()
|
||||
);
|
||||
```
|
||||
|
||||
### 4. Sistema de Conquistas
|
||||
```sql
|
||||
create table achievement_types (
|
||||
id uuid primary key default uuid_generate_v4(),
|
||||
name varchar not null,
|
||||
description text,
|
||||
created_at timestamptz default now()
|
||||
);
|
||||
|
||||
create table achievements (
|
||||
id uuid primary key default uuid_generate_v4(),
|
||||
name text not null,
|
||||
description text
|
||||
);
|
||||
```
|
||||
|
||||
### 5. Sistema Fonético
|
||||
|
||||
#### Categorias e Palavras
|
||||
```sql
|
||||
create table phonics_categories (
|
||||
id uuid primary key default uuid_generate_v4(),
|
||||
name varchar not null,
|
||||
description text,
|
||||
level integer,
|
||||
order_index integer,
|
||||
created_at timestamptz default now(),
|
||||
updated_at timestamptz default now()
|
||||
);
|
||||
|
||||
create table phonics_words (
|
||||
id uuid primary key default uuid_generate_v4(),
|
||||
word varchar not null,
|
||||
phonetic_transcription varchar,
|
||||
syllables_count integer,
|
||||
created_at timestamptz default now()
|
||||
);
|
||||
|
||||
create table phonics_word_audio (
|
||||
id uuid primary key default uuid_generate_v4(),
|
||||
word text not null,
|
||||
audio_url text,
|
||||
audio_path text,
|
||||
created_at timestamptz default now()
|
||||
);
|
||||
```
|
||||
|
||||
#### Exercícios
|
||||
```sql
|
||||
create table phonics_exercise_types (
|
||||
id uuid primary key default uuid_generate_v4(),
|
||||
name varchar not null,
|
||||
description text,
|
||||
created_at timestamptz default now()
|
||||
);
|
||||
|
||||
create table phonics_exercises (
|
||||
id uuid primary key default uuid_generate_v4(),
|
||||
category_id uuid references phonics_categories(id),
|
||||
type_id uuid references phonics_exercise_types(id),
|
||||
title varchar not null,
|
||||
description text,
|
||||
difficulty_level integer,
|
||||
estimated_time_seconds integer,
|
||||
instructions text,
|
||||
points integer,
|
||||
is_active boolean default true,
|
||||
required_score double precision,
|
||||
created_at timestamptz default now(),
|
||||
updated_at timestamptz default now()
|
||||
);
|
||||
|
||||
create table phonics_exercise_words (
|
||||
id uuid primary key default uuid_generate_v4(),
|
||||
exercise_id uuid references phonics_exercises(id),
|
||||
word_id uuid references phonics_words(id),
|
||||
is_correct_answer boolean,
|
||||
order_index integer,
|
||||
created_at timestamptz default now()
|
||||
);
|
||||
```
|
||||
|
||||
#### Mídia
|
||||
```sql
|
||||
create table media_types (
|
||||
id uuid primary key default uuid_generate_v4(),
|
||||
name varchar not null,
|
||||
description text,
|
||||
created_at timestamptz default now()
|
||||
);
|
||||
|
||||
create table phonics_exercise_media (
|
||||
id uuid primary key default uuid_generate_v4(),
|
||||
exercise_id uuid references phonics_exercises(id),
|
||||
media_type_id uuid references media_types(id),
|
||||
url text,
|
||||
alt_text text,
|
||||
order_index integer,
|
||||
created_at timestamptz default now()
|
||||
);
|
||||
```
|
||||
|
||||
#### Conquistas Fonéticas
|
||||
```sql
|
||||
create table phonics_achievements (
|
||||
id uuid primary key default uuid_generate_v4(),
|
||||
type_id uuid references achievement_types(id),
|
||||
name varchar not null,
|
||||
description text,
|
||||
points integer,
|
||||
icon_url text,
|
||||
required_count integer,
|
||||
created_at timestamptz default now()
|
||||
);
|
||||
```
|
||||
|
||||
## Relacionamentos
|
||||
|
||||
### Hierarquia Principal
|
||||
```mermaid
|
||||
erDiagram
|
||||
Schools ||--o{ Classes : "has"
|
||||
Classes ||--o{ Students : "contains"
|
||||
Students ||--o{ Stories : "creates"
|
||||
Students ||--o{ Interests : "has"
|
||||
Students ||--o{ Achievements : "earns"
|
||||
|
||||
PhonicsCategories ||--o{ PhonicsExercises : "contains"
|
||||
PhonicsExercises ||--o{ PhonicsExerciseWords : "has"
|
||||
PhonicsWords }|--o{ PhonicsExerciseWords : "used_in"
|
||||
PhonicsExercises ||--o{ PhonicsExerciseMedia : "has"
|
||||
MediaTypes ||--o{ PhonicsExerciseMedia : "defines"
|
||||
```
|
||||
|
||||
## Índices e Otimizações
|
||||
|
||||
### Performance
|
||||
```sql
|
||||
-- Busca de exercícios por categoria
|
||||
create index idx_exercises_category on phonics_exercises(category_id);
|
||||
|
||||
-- Busca de histórias por aluno
|
||||
create index idx_stories_student on stories(student_id);
|
||||
|
||||
-- Busca de palavras por exercício
|
||||
create index idx_exercise_words on phonics_exercise_words(exercise_id);
|
||||
|
||||
-- Busca por conteúdo de história
|
||||
create index idx_stories_content on stories using gin (content);
|
||||
```
|
||||
|
||||
## Considerações de Segurança
|
||||
|
||||
### RLS (Row Level Security)
|
||||
```sql
|
||||
-- Alunos só podem ver suas próprias histórias
|
||||
create policy "Students view own stories" on stories
|
||||
for select using (auth.uid() = student_id);
|
||||
|
||||
-- Professores podem ver histórias de seus alunos
|
||||
create policy "Teachers view class stories" on stories
|
||||
for select using (
|
||||
auth.uid() in (
|
||||
select teacher_id from classes c
|
||||
join students s on s.class_id = c.id
|
||||
where s.id = stories.student_id
|
||||
)
|
||||
);
|
||||
```
|
||||
|
||||
## Triggers
|
||||
|
||||
### Atualização Automática
|
||||
```sql
|
||||
-- Atualizar student_progress após nova gravação
|
||||
create trigger update_student_progress
|
||||
after insert or update on story_recordings
|
||||
for each row
|
||||
execute function update_student_progress();
|
||||
|
||||
-- Calcular duração da sessão de leitura
|
||||
create trigger calculate_session_duration
|
||||
before update on reading_sessions
|
||||
for each row
|
||||
when (NEW.end_time is not null)
|
||||
execute function calculate_session_duration();
|
||||
```
|
||||
|
||||
## Funções
|
||||
|
||||
### Análise de Progresso
|
||||
```sql
|
||||
-- Calcular nível de leitura
|
||||
create function calculate_reading_level(
|
||||
student_id uuid
|
||||
) returns text as $$
|
||||
-- Lógica de cálculo baseada em:
|
||||
-- - Média de palavras por minuto
|
||||
-- - Scores de fluência
|
||||
-- - Quantidade de histórias lidas
|
||||
$$ language plpgsql;
|
||||
|
||||
-- Atualizar métricas de progresso
|
||||
create function update_student_progress() returns trigger as $$
|
||||
-- Atualiza:
|
||||
-- - Médias de performance
|
||||
-- - Total de tempo lido
|
||||
-- - Histórias completadas
|
||||
-- - Pontos fortes e melhorias
|
||||
$$ language plpgsql;
|
||||
```
|
||||
|
||||
## Considerações de Performance
|
||||
|
||||
### 1. Particionamento
|
||||
- Gravações particionadas por mês
|
||||
- Sessões particionadas por aluno
|
||||
- Histórias particionadas por complexidade
|
||||
|
||||
### 2. Vacuum
|
||||
- Análise regular de dead tuples
|
||||
- Vacuum automático configurado
|
||||
- Monitoramento de bloat
|
||||
|
||||
### 3. Cache
|
||||
- Histórias populares em cache
|
||||
- Métricas de progresso em cache
|
||||
- Configurações de usuário em cache
|
||||
|
||||
## Backup e Recuperação
|
||||
|
||||
### 1. Estratégia
|
||||
- Backup completo diário
|
||||
- WAL archiving contínuo
|
||||
- Retenção de 30 dias
|
||||
- Teste mensal de recuperação
|
||||
|
||||
### 2. Monitoramento
|
||||
- Tamanho do banco
|
||||
- Tempo de queries
|
||||
- Uso de índices
|
||||
- Deadlocks
|
||||
117
docs/controles-texto.md
Normal file
117
docs/controles-texto.md
Normal file
@ -0,0 +1,117 @@
|
||||
# Controles de Texto
|
||||
|
||||
## Visão Geral
|
||||
Os controles de texto são um conjunto de funcionalidades que permitem aos usuários personalizar a apresentação do texto para melhor legibilidade e compreensão.
|
||||
|
||||
## Componentes Principais
|
||||
|
||||
### 1. TextControls
|
||||
Componente principal que agrupa todos os controles de texto.
|
||||
|
||||
#### Seção 1: Controles de Formatação Básica
|
||||
- **Maiúsculas/Minúsculas**
|
||||
- Alterna entre texto em maiúsculas e minúsculas
|
||||
- Útil para leitores iniciantes
|
||||
- Mantém estado global da preferência
|
||||
|
||||
- **Sílabas**
|
||||
- Ativa/desativa a separação silábica
|
||||
- Ajuda na compreensão da estrutura das palavras
|
||||
- Usa hífens para separação visual
|
||||
|
||||
- **Destaque de Palavras**
|
||||
- Realça palavras sequencialmente
|
||||
- Auxilia no acompanhamento da leitura
|
||||
- Velocidade ajustável
|
||||
|
||||
#### Seção 2: Controles de Formatação Avançada
|
||||
- **Tamanho da Fonte**
|
||||
- Range: 12px - 32px
|
||||
- Incrementos de 2px
|
||||
- Ícone visual indicativo
|
||||
|
||||
- **Espaçamento entre Letras**
|
||||
- Ajuste fino do kerning
|
||||
- Melhora legibilidade
|
||||
- Suporte para necessidades especiais
|
||||
|
||||
- **Espaçamento entre Palavras**
|
||||
- Controle da distância entre palavras
|
||||
- Facilita a leitura
|
||||
- Ajuda na compreensão do texto
|
||||
|
||||
- **Altura da Linha**
|
||||
- Ajuste do espaçamento vertical
|
||||
- Melhora conforto visual
|
||||
- Previne confusão entre linhas
|
||||
|
||||
### 2. AdaptiveText
|
||||
Componente que implementa as transformações de texto.
|
||||
|
||||
```typescript
|
||||
interface AdaptiveTextProps {
|
||||
text: string;
|
||||
isUpperCase: boolean;
|
||||
preserveWhitespace?: boolean;
|
||||
highlightSyllables?: boolean;
|
||||
}
|
||||
```
|
||||
|
||||
## Funcionalidades Técnicas
|
||||
|
||||
### 1. Gestão de Estado
|
||||
- Uso de hooks personalizados para gerenciar preferências
|
||||
- Persistência de configurações por usuário
|
||||
- Sincronização em tempo real
|
||||
|
||||
### 2. Transformações de Texto
|
||||
- Conversão maiúsculo/minúsculo
|
||||
- Separação silábica
|
||||
- Destaque sequencial de palavras
|
||||
|
||||
### 3. Acessibilidade
|
||||
- Suporte a ARIA labels
|
||||
- Alto contraste
|
||||
- Feedback visual claro
|
||||
- Suporte a leitores de tela
|
||||
|
||||
## Integração com Modo Foco
|
||||
- Controles permanecem acessíveis
|
||||
- Transições suaves
|
||||
- Estado preservado entre modos
|
||||
|
||||
## Exemplos de Uso
|
||||
|
||||
### Implementação Básica
|
||||
```typescript
|
||||
<TextControls
|
||||
fontSize={18}
|
||||
onFontSizeChange={handleFontSizeChange}
|
||||
letterSpacing={0.5}
|
||||
onLetterSpacingChange={handleLetterSpacingChange}
|
||||
wordSpacing={2}
|
||||
onWordSpacingChange={handleWordSpacingChange}
|
||||
lineHeight={1.5}
|
||||
onLineHeightChange={handleLineHeightChange}
|
||||
/>
|
||||
```
|
||||
|
||||
### Uso com AdaptiveText
|
||||
```typescript
|
||||
<AdaptiveText
|
||||
text="Exemplo de texto adaptativo"
|
||||
isUpperCase={isUpperCase}
|
||||
highlightSyllables={isSyllablesEnabled}
|
||||
/>
|
||||
```
|
||||
|
||||
## Considerações de Performance
|
||||
- Memoização de componentes
|
||||
- Otimização de re-renders
|
||||
- Lazy loading de recursos
|
||||
|
||||
## Próximas Melhorias
|
||||
1. Adicionar mais opções de formatação
|
||||
2. Implementar temas personalizados
|
||||
3. Melhorar algoritmo de separação silábica
|
||||
4. Adicionar suporte a mais idiomas
|
||||
166
docs/geracao-historia.md
Normal file
166
docs/geracao-historia.md
Normal file
@ -0,0 +1,166 @@
|
||||
# Geração de Histórias
|
||||
|
||||
## Visão Geral
|
||||
O sistema de geração de histórias permite criar conteúdo personalizado baseado em parâmetros fornecidos pelo usuário, utilizando IA para gerar narrativas educativas e envolventes.
|
||||
|
||||
## Parâmetros de Entrada
|
||||
|
||||
### StoryChoices
|
||||
```typescript
|
||||
interface StoryChoices {
|
||||
protagonist: string; // Nome/tipo do protagonista
|
||||
setting: string; // Ambiente da história
|
||||
theme: string; // Tema principal
|
||||
genre: string; // Gênero da história
|
||||
educationalGoal: string; // Objetivo educacional
|
||||
ageGroup: string; // Faixa etária
|
||||
length: 'short' | 'medium' | 'long'; // Extensão da história
|
||||
complexity: 'easy' | 'medium' | 'hard'; // Nível de complexidade
|
||||
language: 'pt-BR'; // Idioma (fixo em português)
|
||||
}
|
||||
```
|
||||
|
||||
## Modos de Entrada
|
||||
|
||||
### 1. Formulário
|
||||
- Interface gráfica com campos estruturados
|
||||
- Validação em tempo real
|
||||
- Sugestões pré-definidas
|
||||
- Preview instantâneo
|
||||
|
||||
### 2. Comando de Voz
|
||||
- Reconhecimento de fala natural
|
||||
- Extração automática de parâmetros
|
||||
- Confirmação por voz
|
||||
- Correção por voz ou texto
|
||||
|
||||
### 3. Texto Livre
|
||||
- Processamento de linguagem natural
|
||||
- Identificação de parâmetros-chave
|
||||
- Sugestão de complementos
|
||||
- Refinamento interativo
|
||||
|
||||
## Fluxo de Geração
|
||||
|
||||
### 1. Coleta de Parâmetros
|
||||
```typescript
|
||||
// Exemplo de validação de parâmetros
|
||||
const validateStoryParams = (choices: StoryChoices): boolean => {
|
||||
return (
|
||||
!!choices.protagonist &&
|
||||
!!choices.setting &&
|
||||
!!choices.theme &&
|
||||
!!choices.genre &&
|
||||
!!choices.educationalGoal &&
|
||||
!!choices.ageGroup
|
||||
);
|
||||
};
|
||||
```
|
||||
|
||||
### 2. Processamento
|
||||
1. **Validação**
|
||||
- Verificação de campos obrigatórios
|
||||
- Validação de conteúdo apropriado
|
||||
- Checagem de restrições de idade
|
||||
|
||||
2. **Preparação**
|
||||
- Formatação dos parâmetros
|
||||
- Ajuste de complexidade
|
||||
- Definição de estrutura
|
||||
|
||||
3. **Geração**
|
||||
- Criação do conteúdo via IA
|
||||
- Revisão automática
|
||||
- Formatação do texto
|
||||
|
||||
### 3. Pós-processamento
|
||||
- Verificação de adequação
|
||||
- Ajustes de formatação
|
||||
- Adição de metadados
|
||||
- Geração de recursos visuais
|
||||
|
||||
## Controles de Qualidade
|
||||
|
||||
### 1. Adequação de Conteúdo
|
||||
- Filtro de conteúdo impróprio
|
||||
- Verificação de complexidade
|
||||
- Adequação à faixa etária
|
||||
- Alinhamento educacional
|
||||
|
||||
### 2. Estrutura Narrativa
|
||||
- Coerência da história
|
||||
- Desenvolvimento de personagens
|
||||
- Arco narrativo apropriado
|
||||
- Conclusão educativa
|
||||
|
||||
### 3. Linguagem
|
||||
- Vocabulário adequado
|
||||
- Estruturas gramaticais
|
||||
- Pontuação correta
|
||||
- Ritmo de leitura
|
||||
|
||||
## Integração com Modo Foco
|
||||
|
||||
### 1. Formatação Adaptativa
|
||||
- Ajuste automático de fonte
|
||||
- Espaçamento otimizado
|
||||
- Quebras de linha estratégicas
|
||||
- Destaque de palavras-chave
|
||||
|
||||
### 2. Recursos de Acessibilidade
|
||||
- Suporte a leitura em voz alta
|
||||
- Marcadores visuais
|
||||
- Controles de navegação
|
||||
- Ajustes de contraste
|
||||
|
||||
## Armazenamento
|
||||
|
||||
### 1. Estrutura de Dados
|
||||
```typescript
|
||||
interface Story {
|
||||
id: string;
|
||||
title: string;
|
||||
content: string;
|
||||
parameters: StoryChoices;
|
||||
metadata: {
|
||||
wordCount: number;
|
||||
readingTime: number;
|
||||
complexity: number;
|
||||
keywords: string[];
|
||||
};
|
||||
created_at: string;
|
||||
updated_at: string;
|
||||
}
|
||||
```
|
||||
|
||||
### 2. Indexação
|
||||
- Busca por parâmetros
|
||||
- Filtros de complexidade
|
||||
- Tags educacionais
|
||||
- Histórico de geração
|
||||
|
||||
## Próximas Melhorias
|
||||
|
||||
1. **Personalização Avançada**
|
||||
- Perfis de aprendizado
|
||||
- Adaptação dinâmica
|
||||
- Temas customizados
|
||||
- Integração curricular
|
||||
|
||||
2. **Geração Multimodal**
|
||||
- Ilustrações automáticas
|
||||
- Efeitos sonoros
|
||||
- Animações simples
|
||||
- Recursos interativos
|
||||
|
||||
3. **Análise de Impacto**
|
||||
- Métricas de engajamento
|
||||
- Progresso educacional
|
||||
- Feedback do usuário
|
||||
- Ajustes automáticos
|
||||
|
||||
4. **Colaboração**
|
||||
- Edição compartilhada
|
||||
- Biblioteca de recursos
|
||||
- Compartilhamento social
|
||||
- Feedback comunitário
|
||||
151
docs/gravacao-audio.md
Normal file
151
docs/gravacao-audio.md
Normal file
@ -0,0 +1,151 @@
|
||||
# Sistema de Gravação de Áudio
|
||||
|
||||
## Visão Geral
|
||||
O sistema de gravação de áudio permite aos alunos gravar suas leituras para análise posterior, com integração ao Modo Foco e recursos de acessibilidade.
|
||||
|
||||
## Componentes
|
||||
|
||||
### 1. AudioRecorder
|
||||
Componente principal responsável pela gravação de áudio.
|
||||
|
||||
#### Props
|
||||
```typescript
|
||||
interface AudioRecorderProps {
|
||||
storyId: string;
|
||||
studentId: string;
|
||||
onAudioUploaded: (audioUrl: string) => void;
|
||||
onRecordingStart?: () => void;
|
||||
onRecordingStop?: () => void;
|
||||
focusModeActive?: boolean;
|
||||
onFocusModeToggle?: () => void;
|
||||
}
|
||||
```
|
||||
|
||||
### 2. Estados de Gravação
|
||||
- **Não Iniciado**: Exibe botão "Iniciar Gravação"
|
||||
- **Gravando**: Exibe botão "Parar Gravação"
|
||||
- **Gravado**: Exibe opções de ouvir e enviar
|
||||
- **Enviando**: Exibe indicador de progresso
|
||||
|
||||
## Funcionalidades
|
||||
|
||||
### 1. Controle de Gravação
|
||||
- Início/parada de gravação
|
||||
- Feedback visual do estado atual
|
||||
- Integração com Modo Foco
|
||||
- Controle de permissões do microfone
|
||||
|
||||
### 2. Processamento de Áudio
|
||||
- Formato: WebM
|
||||
- Armazenamento temporário em Blob
|
||||
- Conversão e compressão antes do upload
|
||||
- Validação de qualidade
|
||||
|
||||
### 3. Upload e Armazenamento
|
||||
- Upload para Supabase Storage
|
||||
- Geração de URLs públicas
|
||||
- Organização por aluno/história
|
||||
- Backup e cache
|
||||
|
||||
### 4. Integração com Modo Foco
|
||||
- Ativação automática do Modo Foco
|
||||
- Desativação ao finalizar gravação
|
||||
- Sincronização de estados
|
||||
- Transições suaves
|
||||
|
||||
## Fluxo de Gravação
|
||||
|
||||
### 1. Início da Gravação
|
||||
```typescript
|
||||
const startRecording = async () => {
|
||||
// 1. Ativar Modo Foco
|
||||
if (!focusModeActive && onFocusModeToggle) {
|
||||
onFocusModeToggle();
|
||||
}
|
||||
|
||||
// 2. Solicitar permissões
|
||||
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
|
||||
|
||||
// 3. Configurar gravador
|
||||
mediaRecorderRef.current = new MediaRecorder(stream);
|
||||
|
||||
// 4. Iniciar gravação
|
||||
mediaRecorderRef.current.start();
|
||||
};
|
||||
```
|
||||
|
||||
### 2. Finalização da Gravação
|
||||
```typescript
|
||||
const stopRecording = () => {
|
||||
// 1. Parar gravação
|
||||
mediaRecorderRef.current?.stop();
|
||||
|
||||
// 2. Liberar recursos
|
||||
mediaRecorderRef.current?.stream.getTracks().forEach(track => track.stop());
|
||||
|
||||
// 3. Desativar Modo Foco
|
||||
if (focusModeActive && onFocusModeToggle) {
|
||||
onFocusModeToggle();
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
### 3. Upload do Áudio
|
||||
```typescript
|
||||
const uploadAudio = async () => {
|
||||
// 1. Preparar arquivo
|
||||
const filePath = `${studentId}/${storyId}/${fileId}.webm`;
|
||||
|
||||
// 2. Fazer upload
|
||||
await supabase.storage
|
||||
.from('recordings')
|
||||
.upload(filePath, audioBlob);
|
||||
|
||||
// 3. Obter URL pública
|
||||
const { publicUrl } = supabase.storage
|
||||
.from('recordings')
|
||||
.getPublicUrl(filePath);
|
||||
|
||||
// 4. Criar registro
|
||||
await supabase
|
||||
.from('story_recordings')
|
||||
.insert({
|
||||
id: fileId,
|
||||
story_id: storyId,
|
||||
student_id: studentId,
|
||||
audio_url: publicUrl
|
||||
});
|
||||
};
|
||||
```
|
||||
|
||||
## Tratamento de Erros
|
||||
|
||||
### 1. Permissões
|
||||
- Verificação de disponibilidade do microfone
|
||||
- Solicitação de permissões do usuário
|
||||
- Feedback claro em caso de negação
|
||||
|
||||
### 2. Gravação
|
||||
- Monitoramento de qualidade
|
||||
- Detecção de silêncio
|
||||
- Limite de duração
|
||||
- Feedback de volume
|
||||
|
||||
### 3. Upload
|
||||
- Retry em caso de falha
|
||||
- Limpeza de arquivos temporários
|
||||
- Validação de formato
|
||||
- Feedback de progresso
|
||||
|
||||
## Considerações de Segurança
|
||||
- Validação de tipos de arquivo
|
||||
- Sanitização de nomes de arquivo
|
||||
- Controle de acesso por usuário
|
||||
- Expiração de URLs temporárias
|
||||
|
||||
## Próximas Melhorias
|
||||
1. Adicionar visualização de forma de onda
|
||||
2. Implementar edição básica de áudio
|
||||
3. Melhorar feedback de qualidade
|
||||
4. Adicionar suporte a mais formatos
|
||||
5. Implementar detecção de ruído
|
||||
90
docs/modo-foco.md
Normal file
90
docs/modo-foco.md
Normal file
@ -0,0 +1,90 @@
|
||||
# Modo Foco
|
||||
|
||||
## Visão Geral
|
||||
O Modo Foco é uma funcionalidade projetada para melhorar a experiência de leitura e gravação de histórias, focando na concentração e acessibilidade.
|
||||
|
||||
## Funcionalidades
|
||||
|
||||
### 1. Ativação Automática
|
||||
- Inicia automaticamente ao começar uma gravação
|
||||
- Desativa automaticamente ao parar a gravação
|
||||
- Pode ser ativado/desativado manualmente através do botão dedicado
|
||||
|
||||
### 2. Interface Adaptativa
|
||||
- Remove distrações visuais durante a leitura
|
||||
- Aumenta o foco no texto atual
|
||||
- Transições suaves entre estados
|
||||
|
||||
### 3. Controles de Acessibilidade
|
||||
- Ajuste de tamanho da fonte (12px - 32px)
|
||||
- Controle de espaçamento entre letras
|
||||
- Controle de espaçamento entre palavras
|
||||
- Ajuste de altura da linha
|
||||
- Velocidade de leitura personalizável
|
||||
|
||||
### 4. Organização dos Controles
|
||||
#### Seção 1 (Controles Principais)
|
||||
- Maiúsculas/Minúsculas
|
||||
- Sílabas
|
||||
- Destacar palavras
|
||||
|
||||
#### Seção 2 (Controles de Formatação)
|
||||
- Tamanho da fonte
|
||||
- Espaçamento entre letras
|
||||
- Espaçamento entre palavras
|
||||
- Altura da linha
|
||||
- Velocidade de leitura
|
||||
|
||||
### 5. Indicadores Visuais
|
||||
- Ícones intuitivos para cada função
|
||||
- Feedback visual do estado atual
|
||||
- Timer de gravação
|
||||
- Destaque de palavras durante a leitura
|
||||
|
||||
## Estilos e Temas
|
||||
- Modo claro com fundo suave
|
||||
- Contraste adequado para leitura
|
||||
- Sombras sutis para hierarquia visual
|
||||
- Design responsivo para diferentes tamanhos de tela
|
||||
|
||||
## Integração
|
||||
- Componente `AudioRecorder` para gravações
|
||||
- Componente `TextControls` para formatação
|
||||
- Sistema de destaque de palavras
|
||||
- Gerenciamento de estado global
|
||||
|
||||
## Uso Técnico
|
||||
|
||||
### Ativação do Modo Foco
|
||||
```typescript
|
||||
// Em AudioRecorder
|
||||
const startRecording = async () => {
|
||||
if (!focusModeActive && onFocusModeToggle) {
|
||||
onFocusModeToggle();
|
||||
}
|
||||
// ... resto do código
|
||||
};
|
||||
```
|
||||
|
||||
### Desativação do Modo Foco
|
||||
```typescript
|
||||
// Em AudioRecorder
|
||||
const stopRecording = () => {
|
||||
// ... código de parada da gravação
|
||||
if (focusModeActive && onFocusModeToggle) {
|
||||
onFocusModeToggle();
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
## Considerações de Acessibilidade
|
||||
- Alto contraste para melhor legibilidade
|
||||
- Suporte a diferentes tamanhos de fonte
|
||||
- Controles de espaçamento para dislexia
|
||||
- Feedback visual claro das ações
|
||||
|
||||
## Próximos Passos
|
||||
1. Implementar persistência das preferências do usuário
|
||||
2. Adicionar mais opções de temas
|
||||
3. Expandir controles de acessibilidade
|
||||
4. Melhorar feedback de progresso da leitura
|
||||
150
docs/processamento-audio.md
Normal file
150
docs/processamento-audio.md
Normal file
@ -0,0 +1,150 @@
|
||||
# Processamento de Áudio (Edge Function)
|
||||
|
||||
## Visão Geral
|
||||
O sistema de processamento de áudio é uma Edge Function que analisa gravações de leitura, fornecendo métricas detalhadas sobre fluência, pronúncia e compreensão.
|
||||
|
||||
## Estrutura de Dados
|
||||
|
||||
### AudioRecord
|
||||
```typescript
|
||||
interface AudioRecord {
|
||||
id: string
|
||||
story_id: string
|
||||
student_id: string
|
||||
audio_url: string
|
||||
status: 'pending_analysis' | 'processing' | 'completed' | 'error'
|
||||
analysis: any
|
||||
created_at: string
|
||||
transcription: string | null
|
||||
processed_at: string | null
|
||||
error_message: string | null
|
||||
fluency_score: number | null
|
||||
pronunciation_score: number | null
|
||||
accuracy_score: number | null
|
||||
comprehension_score: number | null
|
||||
words_per_minute: number | null
|
||||
pause_count: number | null
|
||||
error_count: number | null
|
||||
self_corrections: number | null
|
||||
strengths: string[]
|
||||
improvements: string[]
|
||||
suggestions: string | null
|
||||
}
|
||||
```
|
||||
|
||||
## Fluxo de Processamento
|
||||
|
||||
### 1. Recebimento da Requisição
|
||||
- Validação inicial dos dados recebidos
|
||||
- Configuração de CORS e headers
|
||||
- Inicialização do logger
|
||||
|
||||
### 2. Processamento Principal
|
||||
O processamento ocorre em etapas sequenciais:
|
||||
|
||||
1. **Verificação e Atualização de Status**
|
||||
- Verifica existência do registro
|
||||
- Cria registro se necessário
|
||||
- Atualiza status para 'processing'
|
||||
|
||||
2. **Processamento do Áudio**
|
||||
- Transcrição via Whisper API
|
||||
- Análise do texto transcrito
|
||||
|
||||
3. **Análise da Leitura**
|
||||
- Cálculo de métricas de fluência
|
||||
- Avaliação de pronúncia
|
||||
- Identificação de pontos fortes e melhorias
|
||||
|
||||
4. **Atualização do Banco**
|
||||
- Preparação dos dados de análise
|
||||
- Verificação pré-update
|
||||
- Atualização do registro
|
||||
- Verificação pós-update
|
||||
|
||||
## Tratamento de Erros
|
||||
|
||||
### 1. Validação de Dados
|
||||
```typescript
|
||||
if (!data?.record?.id || !data?.record?.audio_url) {
|
||||
throw new Error('Dados inválidos: ID ou URL do áudio ausentes')
|
||||
}
|
||||
```
|
||||
|
||||
### 2. Atualização de Status de Erro
|
||||
- Em caso de falha, atualiza o registro com status 'error'
|
||||
- Armazena mensagem de erro para diagnóstico
|
||||
- Retorna resposta com detalhes do erro
|
||||
|
||||
## Métricas Analisadas
|
||||
|
||||
### Pontuações
|
||||
- Fluência (0-100)
|
||||
- Pronúncia (0-100)
|
||||
- Precisão (0-100)
|
||||
- Compreensão (0-100)
|
||||
|
||||
### Métricas Quantitativas
|
||||
- Palavras por minuto
|
||||
- Contagem de pausas
|
||||
- Contagem de erros
|
||||
- Autocorreções
|
||||
|
||||
### Feedback Qualitativo
|
||||
- Pontos fortes identificados
|
||||
- Áreas para melhoria
|
||||
- Sugestões personalizadas
|
||||
|
||||
## Logs e Monitoramento
|
||||
|
||||
### Eventos Registrados
|
||||
- Recebimento de requisição
|
||||
- Atualizações de status
|
||||
- Resultados de processamento
|
||||
- Erros e exceções
|
||||
|
||||
### Formato dos Logs
|
||||
```typescript
|
||||
logger.info('event_name', 'Descrição do evento', {
|
||||
contextData: 'dados adicionais'
|
||||
})
|
||||
```
|
||||
|
||||
## Considerações de Segurança
|
||||
|
||||
### 1. Autenticação
|
||||
- Validação de tokens
|
||||
- Verificação de permissões
|
||||
- Controle de acesso por usuário
|
||||
|
||||
### 2. Dados Sensíveis
|
||||
- Sanitização de inputs
|
||||
- Validação de URLs
|
||||
- Proteção contra injeção
|
||||
|
||||
### 3. Rate Limiting
|
||||
- Controle de requisições
|
||||
- Proteção contra sobrecarga
|
||||
- Cache de resultados
|
||||
|
||||
## Próximas Melhorias
|
||||
|
||||
1. **Análise Avançada**
|
||||
- Detecção de padrões de erro
|
||||
- Análise de entonação
|
||||
- Reconhecimento de emoção
|
||||
|
||||
2. **Performance**
|
||||
- Otimização de processamento
|
||||
- Cache distribuído
|
||||
- Processamento em lote
|
||||
|
||||
3. **Feedback**
|
||||
- Relatórios detalhados
|
||||
- Visualizações gráficas
|
||||
- Recomendações personalizadas
|
||||
|
||||
4. **Integração**
|
||||
- Webhooks para notificações
|
||||
- API para consultas em tempo real
|
||||
- Exportação de dados
|
||||
Loading…
Reference in New Issue
Block a user