diff --git a/create_phonics_policies.sql b/create_phonics_policies.sql new file mode 100644 index 0000000..070ad9f --- /dev/null +++ b/create_phonics_policies.sql @@ -0,0 +1,32 @@ +-- Políticas para permitir leitura por usuários autenticados +CREATE POLICY "Permitir leitura de exercícios fonéticos para usuários autenticados" ON phonics_exercises + FOR SELECT + TO authenticated + USING (true); + +CREATE POLICY "Permitir leitura de categorias fonéticas para usuários autenticados" ON phonics_categories + FOR SELECT + TO authenticated + USING (true); + +CREATE POLICY "Permitir leitura de tipos de exercícios fonéticos para usuários autenticados" ON phonics_exercise_types + FOR SELECT + TO authenticated + USING (true); + +CREATE POLICY "Permitir leitura de palavras fonéticas para usuários autenticados" ON phonics_words + FOR SELECT + TO authenticated + USING (true); + +CREATE POLICY "Permitir leitura de relações exercício-palavra para usuários autenticados" ON phonics_exercise_words + FOR SELECT + TO authenticated + USING (true); + +-- Habilitar RLS nas tabelas +ALTER TABLE phonics_exercises ENABLE ROW LEVEL SECURITY; +ALTER TABLE phonics_categories ENABLE ROW LEVEL SECURITY; +ALTER TABLE phonics_exercise_types ENABLE ROW LEVEL SECURITY; +ALTER TABLE phonics_words ENABLE ROW LEVEL SECURITY; +ALTER TABLE phonics_exercise_words ENABLE ROW LEVEL SECURITY; \ No newline at end of file diff --git a/src/hooks/phonics/usePhonicsExercises.ts b/src/hooks/phonics/usePhonicsExercises.ts index fba5678..8c6cc5b 100644 --- a/src/hooks/phonics/usePhonicsExercises.ts +++ b/src/hooks/phonics/usePhonicsExercises.ts @@ -10,12 +10,21 @@ export function usePhonicsExercises(categoryId?: string) { .from('phonics_exercises') .select(` *, - category:phonics_categories(id, name, description, level), + category:phonics_categories( + id, + name, + description, + level + ), + type:phonics_exercise_types( + id, + name + ), words:phonics_exercise_words( id, is_correct_answer, order_index, - word:phonics_words(*) + word:phonics_words(word) ) `) .eq('is_active', true) diff --git a/supabase/migrations/20240321000001_insert_phonics_data.sql b/supabase/migrations/20240321000001_insert_phonics_data.sql new file mode 100644 index 0000000..c6efe5e --- /dev/null +++ b/supabase/migrations/20240321000001_insert_phonics_data.sql @@ -0,0 +1,146 @@ +-- Inserir categorias de exercícios +WITH inserted_categories AS ( + INSERT INTO phonics_categories (name, description, level, order_index) VALUES + ('Rimas', 'Exercícios para praticar rimas', 1, 1), + ('Sons Iniciais', 'Exercícios com sons iniciais', 1, 2), + ('Sons Finais', 'Exercícios com sons finais', 2, 3), + ('Sílabas', 'Exercícios de contagem de sílabas', 2, 4) + RETURNING id, name, level -- Include level in the RETURNING clause +), + +-- Inserir tipos de exercícios +inserted_types AS ( + INSERT INTO phonics_exercise_types (name, description) VALUES + ('rhyme', 'Exercícios de rima'), + ('initial_sound', 'Exercícios de som inicial'), + ('final_sound', 'Exercícios de som final'), + ('syllables', 'Exercícios de sílabas') + RETURNING id, name +), + +-- Inserir palavras para os exercícios +inserted_words AS ( + INSERT INTO phonics_words (word, phonetic_transcription, syllables_count) VALUES + -- Palavras para rimas + ('bola', 'bɔ.la', 2), + ('cola', 'kɔ.la', 2), + ('mola', 'mɔ.la', 2), + ('sala', 'sa.la', 2), + -- Palavras para sons iniciais + ('pato', 'pa.to', 2), + ('pera', 'pe.ɾa', 2), + ('gato', 'ga.to', 2), + ('mesa', 'me.za', 2), + -- Palavras para sons finais + ('casa', 'ka.za', 2), + ('rosa', 'ʁo.za', 2), + ('rato', 'ʁa.to', 2), + ('mato', 'ma.to', 2), + -- Palavras para sílabas + ('borboleta', 'boʁ.bo.le.ta', 4), + ('sol', 'sɔw', 1), + ('cachorro', 'ka.ʃo.ʁo', 3), + ('pé', 'pɛ', 1) + RETURNING id, word +) + +-- Inserir exercícios +, inserted_exercises AS ( + INSERT INTO phonics_exercises ( + category_id, + type_id, + title, + description, + difficulty_level, + estimated_time_seconds, + instructions, + points, + is_active, + required_score + ) + SELECT + c.id, + t.id, + CASE t.name + WHEN 'rhyme' THEN 'Encontre a Rima: Bola' + WHEN 'initial_sound' THEN 'Som Inicial: Pato' + WHEN 'final_sound' THEN 'Som Final: Casa' + WHEN 'syllables' THEN 'Conte as Sílabas: Borboleta' + END, + CASE t.name + WHEN 'rhyme' THEN 'Encontre a palavra que rima com BOLA' + WHEN 'initial_sound' THEN 'Encontre a palavra que começa com o mesmo som de PATO' + WHEN 'final_sound' THEN 'Encontre a palavra que termina com o mesmo som de CASA' + WHEN 'syllables' THEN 'Quantas sílabas tem a palavra BORBOLETA?' + END, + CASE + WHEN c.level = 1 THEN 1 + ELSE 2 + END, + 60, + CASE t.name + WHEN 'rhyme' THEN 'Clique na palavra que rima com BOLA' + WHEN 'initial_sound' THEN 'Clique na palavra que começa com o mesmo som de PATO' + WHEN 'final_sound' THEN 'Clique na palavra que termina com o mesmo som de CASA' + WHEN 'syllables' THEN 'Clique no número que representa a quantidade de sílabas da palavra BORBOLETA' + END, + 10, + true, + 0.7 + FROM inserted_categories c + JOIN inserted_types t ON + (c.name = 'Rimas' AND t.name = 'rhyme') OR + (c.name = 'Sons Iniciais' AND t.name = 'initial_sound') OR + (c.name = 'Sons Finais' AND t.name = 'final_sound') OR + (c.name = 'Sílabas' AND t.name = 'syllables') + RETURNING id, type_id +) + +-- Relacionar exercícios com palavras +INSERT INTO phonics_exercise_words (exercise_id, word_id, is_correct_answer, order_index) +SELECT + e.id, + w.id, + CASE + -- Exercício de rima (bola) + WHEN t.name = 'rhyme' AND w.word IN ('bola', 'cola') THEN true + WHEN t.name = 'rhyme' AND w.word IN ('gato', 'mesa') THEN false + -- Exercício de som inicial (pato) + WHEN t.name = 'initial_sound' AND w.word IN ('pato', 'pera') THEN true + WHEN t.name = 'initial_sound' AND w.word IN ('gato', 'mesa') THEN false + -- Exercício de som final (casa) + WHEN t.name = 'final_sound' AND w.word IN ('casa', 'rosa') THEN true + WHEN t.name = 'final_sound' AND w.word IN ('rato', 'mato') THEN false + -- Exercício de sílabas (borboleta) + WHEN t.name = 'syllables' AND w.word = 'borboleta' THEN true + WHEN t.name = 'syllables' AND w.word IN ('sol', 'cachorro', 'pé') THEN false + END, + CASE + -- Ordem para exercício de rima + WHEN t.name = 'rhyme' AND w.word = 'bola' THEN 1 + WHEN t.name = 'rhyme' AND w.word = 'cola' THEN 2 + WHEN t.name = 'rhyme' AND w.word = 'gato' THEN 3 + WHEN t.name = 'rhyme' AND w.word = 'mesa' THEN 4 + -- Ordem para exercício de som inicial + WHEN t.name = 'initial_sound' AND w.word = 'pato' THEN 1 + WHEN t.name = 'initial_sound' AND w.word = 'pera' THEN 2 + WHEN t.name = 'initial_sound' AND w.word = 'gato' THEN 3 + WHEN t.name = 'initial_sound' AND w.word = 'mesa' THEN 4 + -- Ordem para exercício de som final + WHEN t.name = 'final_sound' AND w.word = 'casa' THEN 1 + WHEN t.name = 'final_sound' AND w.word = 'rosa' THEN 2 + WHEN t.name = 'final_sound' AND w.word = 'rato' THEN 3 + WHEN t.name = 'final_sound' AND w.word = 'mato' THEN 4 + -- Ordem para exercício de sílabas + WHEN t.name = 'syllables' AND w.word = 'borboleta' THEN 1 + WHEN t.name = 'syllables' AND w.word = 'sol' THEN 2 + WHEN t.name = 'syllables' AND w.word = 'cachorro' THEN 3 + WHEN t.name = 'syllables' AND w.word = 'pé' THEN 4 + END +FROM inserted_exercises e +JOIN inserted_types t ON t.id = e.type_id +JOIN inserted_words w ON + (t.name = 'rhyme' AND w.word IN ('bola', 'cola', 'gato', 'mesa')) OR + (t.name = 'initial_sound' AND w.word IN ('pato', 'pera', 'gato', 'mesa')) OR + (t.name = 'final_sound' AND w.word IN ('casa', 'rosa', 'rato', 'mato')) OR + (t.name = 'syllables' AND w.word IN ('borboleta', 'sol', 'cachorro', 'pé')); \ No newline at end of file