Compare commits

..

69 Commits

Author SHA1 Message Date
Lucas Santana
de28dea3b5 Fixing Git History
Some checks are pending
Docker Build and Push / build (push) Waiting to run
2024-12-29 08:46:22 -03:00
Lucas Santana
4765be66da feat: implementa upload atômico e processamento assíncrono de áudio
- Usa UUID para evitar colisões de arquivos
- Implementa transação atômica para upload
- Adiciona chamada assíncrona para Edge Function
- Melhora tratamento de erros
- Mantém consistência entre storage e banco de dados
2024-12-29 07:11:37 -03:00
Lucas Santana
c562ae570a Corrigindo processamento do áudio 2024-12-28 12:53:23 -03:00
Lucas Santana
f4965db3e6 Corrigindo processamento do áudio 2024-12-28 12:48:02 -03:00
Lucas Santana
933358483e Corrigindo processamento do áudio 2024-12-28 12:42:26 -03:00
Lucas Santana
66d401f98f .gitignore fix 2024-12-27 17:10:42 -03:00
Lucas Santana
a3b522d283 Corrigindo erro supabase 2024-12-27 17:03:12 -03:00
Lucas Santana
5812d46049 Corrigindo erro supabase 2024-12-27 17:01:32 -03:00
Lucas Santana
007441c285 Corrigindo erro supabase 2024-12-27 16:54:34 -03:00
Lucas Santana
c776efaec9 Erro ao salvar no supabase 2024-12-27 15:56:41 -03:00
Lucas Santana
6cf273126e Process audio 2024-12-27 14:41:40 -03:00
Lucas Santana
ec97f640f9 feat: adiciona processamento automático de áudio
- Implementa Edge Function para processamento de áudio
- Adiciona integração com OpenAI Whisper e GPT-4
- Configura Database Trigger para story_recordings
- Implementa análise automática de leitura
- Atualiza documentação e variáveis de ambiente
2024-12-27 13:25:10 -03:00
Lucas Santana
a8c332d442 feat: adiciona processamento automático de áudio
- Implementa Edge Function para processamento de áudio
- Adiciona integração com OpenAI Whisper e GPT-4
- Configura Database Trigger para story_recordings
- Implementa análise automática de leitura
- Atualiza documentação e variáveis de ambiente
2024-12-27 13:24:25 -03:00
Lucas Santana
4d09386d96 generate-story prompt 2024-12-25 14:00:05 -03:00
Lucas Santana
cc23c83c05 feat: adiciona redis e healthcheck
- Implementa cliente Redis com retry e cache
- Adiciona healthcheck da API
- Configura tipagem para Next.js API routes
- Implementa cache de histórias
- Adiciona tratamento de erros robusto
- Configura monitoramento de conexões
- Otimiza performance com cache distribuído
2024-12-25 13:55:03 -03:00
Lucas Santana
521a99a5c2 feat: adiciona configuração docker e ci/cd
- Implementa Dockerfile com multi-stage build
- Configura pipeline no Gitea Actions
- Adiciona integração com Redis
- Implementa healthchecks
- Configura registry no Gitea

minor: novas funcionalidades de infraestrutura
2024-12-25 12:57:08 -03:00
Lucas Santana
563a62a517 feat: adiciona landing page para pais
- Implementa layout moderno e responsivo
- Adiciona seções: Hero, Benefícios, Como Funciona, Análise, Diferencial, Depoimentos e CTA
- Integra gráficos interativos com recharts
- Adiciona métricas de exemplo e comparativos
- Mantém consistência visual com HomePage
- Implementa navegação e rotas
- Otimiza imagens e assets
- Adiciona animações e transições suaves
2024-12-24 17:07:13 -03:00
Lucas Santana
3ef8c99062 fix: melhora tratamento de URLs de imagem
- Adiciona verificação de URLs indefinidas
- Implementa fallback para imagem padrão
- Corrige tipagem em getOptimizedImageUrl
- Padroniza otimização em edge functions
- Previne erros de runtime
2024-12-24 16:19:58 -03:00
Lucas Santana
d5c75ab6c2 fix: melhora tratamento de URLs de imagem
- Adiciona verificação de URLs indefinidas
- Implementa fallback para imagem padrão
- Corrige tipagem em getOptimizedImageUrl
- Padroniza otimização em edge functions
- Previne erros de runtime
2024-12-24 16:19:47 -03:00
Lucas Santana
28fa4d70e6 refactor: remove pasta /pages/story
- Remove pasta /pages/story obsoleta
- Consolida componentes de história em /pages/student-dashboard
- Mantém consistência na organização de arquivos
- Simplifica estrutura de diretórios
2024-12-24 15:46:22 -03:00
Lucas Santana
02119a62d1 feat: implementa otimização global de imagens
- Adiciona função utilitária para otimização de imagens
- Converte automaticamente para WebP
- Implementa redimensionamento contextual
- Centraliza lógica de transformação
- Melhora performance de carregamento
2024-12-23 18:42:53 -03:00
Lucas Santana
7087a87ece refactor: atualiza interface de capa das histórias
- Adiciona tipagem para cover na interface Story
- Atualiza queries para usar story_pages como capa
- Usa página 1 como capa padrão das histórias
- Otimiza carregamento de imagens com parâmetros
2024-12-23 18:21:32 -03:00
Lucas Santana
fbeeace8bb refactor: otimiza carregamento e visualização de imagens
- Implementa lazy loading e placeholders para imagens
- Adiciona pré-carregamento da próxima imagem
- Otimiza URLs de imagem com parâmetros de transformação
- Padroniza visualização de cards de histórias
- Ajusta estilos para consistência entre páginas
- Implementa cache de imagens no frontend
- Atualiza queries para usar story_pages como capa
2024-12-23 15:30:19 -03:00
Lucas Santana
961fce03f6 refactor: atualiza estrutura de dados das histórias
- Migra dados das páginas para tabela story_pages
- Atualiza queries para usar nova estrutura
- Separa componente de demo em StoryPageDemo
- Mantém compatibilidade com interface existente
- Melhora tipagem e tratamento de erros
2024-12-23 14:45:16 -03:00
Lucas Santana
8af9950ed7 fix: corrigindo salvamento da história no banco de dados 2024-12-23 10:05:30 -03:00
Lucas Santana
7e3b4551ec feat: implementa geração de histórias com IA
- Adiciona edge function para geração de histórias
- Integra OpenAI GPT para criação de texto
- Integra DALL-E para geração de imagens
- Implementa fluxo de seleção de categorias
- Adiciona logs detalhados para monitoramento
- Melhora tratamento de erros e validações
- Adiciona feedback visual do processo de geração

Principais mudanças:
- Cria edge function generate-story
- Implementa StoryGenerator com seleção de categorias
- Adiciona integração com OpenAI e DALL-E
- Implementa logs estruturados para debug
- Adiciona tratamento de erros robusto
2024-12-23 09:22:45 -03:00
Lucas Santana
03732de610 feat: implementa geração de histórias com IA
- Adiciona integração com OpenAI GPT e DALL-E
- Implementa fluxo de geração de histórias
- Adiciona feedback visual do processo
- Melhora tratamento de erros
- Adiciona logs para debug

Resolves: #FEAT-123
2024-12-23 09:03:23 -03:00
Lucas Santana
3701e692f1 fix: adiciona optional chaining para prevenir erros de undefined
- Corrige acesso a propriedades undefined em story.content.pages
- Adiciona verificações de segurança com optional chaining (?.)
- Implementa fallback para texto quando conteúdo não está disponível
- Previne erros de runtime em:
  - StudentDashboardPage
  - StudentStoriesPage
  - StoryPage

Resolves: #BUG-789
2024-12-23 07:33:22 -03:00
Lucas Santana
4f3b80246f Alteração do fluxo de geração de histórias 2024-12-22 23:45:42 -03:00
Lucas Santana
0b8c050bd7 feat: implementa geração de histórias com IA
- Adiciona fluxo de criação em etapas com cards
- Implementa Edge Function para geração via GPT-4
- Cria interfaces e tipos para o gerador de histórias
- Adiciona seleção de tema, disciplina, personagem e cenário
- Integra com Supabase para armazenamento e processamento
- Melhora UX com feedback visual e navegação intuitiva
2024-12-22 16:42:39 -03:00
Lucas Santana
1a3a603ff6 Demo StoryPage 2024-12-22 16:28:54 -03:00
Lucas Santana
0661f2c225 Changed Demo Page 2024-12-22 16:08:08 -03:00
Lucas Santana
6531a9282c fix: corrige tipagem do RecordingHistoryCard
- Exporta interface StoryRecording do arquivo de tipos
- Adiciona importação da interface no componente
- Adiciona tipos explícitos nos parâmetros das funções map
- Resolve erros de tipagem no build
2024-12-22 16:01:42 -03:00
Lucas Santana
1132f7438d feat: reorganiza estrutura de métricas e feedback de leitura
- Exporta interface MetricsData do StoryMetrics para reuso
- Adiciona importação da interface no StoryPage
- Mantém consistência de tipos entre gravações e métricas
- Melhora organização do feedback em colunas
- Implementa layout responsivo para diferentes tamanhos de tela
2024-12-22 15:58:32 -03:00
Lucas Santana
797967ca5b feat: adiciona integração com edge function para processamento de áudio
- Cria serviço audioService para upload e processamento
- Implementa componente AudioUploader com feedback visual
- Adiciona componente Button reutilizável
- Integra processamento de áudio na página de histórias
2024-12-21 16:12:02 -03:00
Lucas Santana
6f8e890e86 Corrigindo StoryPage 2024-12-20 18:02:51 -03:00
Lucas Santana
f70585e9c1 feat: adiciona página de conquistas do aluno
- Cria componente AchievementsPage para exibir conquistas do aluno
- Implementa componentes Card e Badge para UI
- Adiciona mock inicial de conquistas para demonstração
- Corrige caminhos de importação relativos
2024-12-20 18:01:12 -03:00
Lucas Santana
5573274ad4 fix: corrige gravação de áudio na página de história
- Remove campos não utilizados (class_id e school_id) da tabela story_recordings
- Simplifica o componente AudioRecorder para usar apenas campos necessários
- Atualiza interface StoryRecording no types/database.ts
- Corrige erro de constraint na inserção de gravações
2024-12-20 16:00:47 -03:00
Lucas Santana
9ecf46a9ac fix: adiciona políticas RLS para story_recordings
- Habilita Row Level Security na tabela story_recordings
- Adiciona política para inserção de gravações por estudantes
- Adiciona política para leitura de gravações por estudantes, professores e escolas
- Corrige erro 403 no upload de áudios
2024-12-20 15:39:46 -03:00
Lucas Santana
6e7c85e853 feat: adiciona página de configurações do aluno
- Cria componente StudentSettingsPage
- Adiciona rota de configurações
- Implementa utils para classes condicionais
- Atualiza navegação no dashboard do aluno
2024-12-20 15:23:48 -03:00
Lucas Santana
1e181785b4 fix: corrige tipagem do sistema de autenticação 2024-12-20 14:30:09 -03:00
Lucas Santana
eb77476d51 fix: corrige tipagem do sistema de autenticação
- Adiciona tipos UserRole e WeakPassword
- Corrige tipagem do UserManagementPage
- Atualiza interface AuthContextType
- Melhora tratamento de erros no fetchUsers
- Adiciona tipagem explícita para User no filter
2024-12-20 14:29:34 -03:00
Lucas Santana
8e8936e9f4 feat: adiciona tipagem forte para metadados do usuário
- Cria interface UserMetadata para tipagem dos metadados do Supabase
- Estende tipos do @supabase/supabase-js com metadados personalizados
- Atualiza useAuth para usar tipagem forte nos roles
- Corrige tipagem do userRole no AuthContext
- Adiciona validação de tipos para roles permitidos
2024-12-20 13:56:43 -03:00
Lucas Santana
dea81a5711 fix: corrige tipagem do sistema de autenticação
- Exporta interface AuthContextType corretamente
- Atualiza tipagem do contexto de autenticação com User do Supabase
- Corrige interface AdminUser para estender User do Supabase
- Implementa type guard mais seguro para filtragem de usuários
- Adiciona implementações vazias para signIn e signUp no AuthContext
2024-12-20 13:53:09 -03:00
Lucas Santana
89c325cc7c fix: corrige tipagem do contexto de autenticação
- Adiciona tipagem User do Supabase para o estado do usuário
- Corrige interface AuthContextType com tipos corretos
- Atualiza AdminUser para garantir email obrigatório
- Adiciona type guard para filtrar usuários válidos
- Exporta e importa tipos do AuthContext corretamente
2024-12-20 13:48:22 -03:00
Lucas Santana
7430ae15a8 feat: adiciona menu de perfil no header
- Cria componente ProfileMenu com dropdown
- Implementa navegação contextual baseada no role do usuário
- Adiciona opções de acesso ao dashboard, perfil e logout
- Atualiza Header para mostrar/esconder botões baseado no estado de autenticação
- Adiciona detecção de clique fora do menu para fechá-lo
2024-12-20 13:45:29 -03:00
Lucas Santana
c8420421eb fix: ajusta verificação de roles no ProtectedRoute
- Adiciona logs detalhados para debug do fluxo de autenticação
- Pega role diretamente dos metadados do usuário
- Simplifica lógica de verificação de roles com switch case
- Melhora mensagens de debug para identificar problemas de acesso
2024-12-20 13:29:31 -03:00
Lucas Santana
441b55535e fix: corrige acesso ao role nos metadados do usuário
- Remove verificação opcional (?.) ao acessar role nos metadados
- Ajusta ordem de declaração da variável userRole no LoginForm
- Atualiza logs para melhor debug do fluxo de autenticação
- Garante acesso direto ao role em user_metadata
2024-12-20 13:17:53 -03:00
Lucas Santana
4b431358e0 Adicionar User Role 2024-12-20 12:10:59 -03:00
Lucas Santana
c0aa725fa6 fix: corrige redirecionamento após login
- Ajusta ordem de redirecionamento no LoginForm para priorizar escola
- Centraliza lógica de redirecionamento no handleRedirect do useAuth
- Adiciona redirecionamento automático ao carregar sessão existente
- Melhora tratamento de eventos de autenticação
2024-12-20 12:10:37 -03:00
Lucas Santana
fca293c4fc fix: corrige redirecionamento após login do aluno
- Atualiza lógica de redirecionamento no LoginForm
- Ajusta verificação de roles no useAuth hook
- Melhora proteção de rotas no ProtectedRoute
- Atualiza rotas para suportar diferentes perfis de usuário
2024-12-20 11:55:19 -03:00
Lucas Santana
beef3da647 feat: adiciona geração de senha mnemônica no cadastro de alunos
- Implementa gerador de senhas mnemônicas (cor + animal + número)
- Adiciona campo de senha com opção de copiar e regenerar
- Remove geração de senha temporária aleatória
- Integra senha mnemônica com envio de email
- Adiciona feedback visual ao copiar senha
2024-12-20 11:42:59 -03:00
Lucas Santana
5952d83ec8 feat: implementa páginas do dashboard do aluno
- Adiciona página de listagem de histórias com filtros e ordenação
- Cria formulário de criação de novas histórias com temas
- Implementa visualizador de história com navegação entre páginas
- Integra gravador de áudio para leitura
- Adiciona funcionalidade de compartilhamento
- Implementa estados de loading e tratamento de erros
2024-12-20 11:11:28 -03:00
Lucas Santana
f1a7cd8730 feat: adiciona página de configurações da escola
- Cria página de configurações com formulário para dados da escola
- Adiciona campos para informações básicas e endereço
- Implementa integração com Supabase para salvar dados
- Adiciona feedback visual de sucesso/erro
- Atualiza rotas e menu lateral com novo link
2024-12-20 10:52:39 -03:00
Lucas Santana
e9e72677a4 style: padroniza layout das páginas de Classes e Professores
- Alinha o visual das páginas com o padrão do StudentsPage
- Ajusta espaçamentos, cores e tipografia
- Melhora a consistência dos componentes de lista
- Adiciona tratamento de erros uniforme
- Padroniza os estados de loading e empty
2024-12-20 10:49:03 -03:00
Lucas Santana
fd734a5c26 feat: implementa dashboard com estatísticas em tempo real
- Adiciona busca de totais de turmas, professores e alunos
- Implementa listagem de turmas recentes com contagem de alunos
- Adiciona seção de histórias recentes com nome dos alunos
- Melhora feedback visual com estados de loading
- Usa queries otimizadas do Supabase com contagem e joins
2024-12-20 10:41:02 -03:00
Lucas Santana
70953ab57a feat: adiciona RootLayout e atualiza rotas da aplicação
- Cria componente RootLayout como container principal
- Atualiza router para usar RootLayout como elemento raiz
- Organiza rotas aninhadas com Outlet do React Router
- Adiciona rota para visualização de histórias individuais
2024-12-20 10:25:21 -03:00
Lucas Santana
fd50d59d3c fix: atualiza regras do cursor e página de história
- Atualiza configurações do .cursorrules
- Ajusta componentes na StoryPage
- Mantém consistência com navegação do demo
- Integra com funcionalidades existentes
2024-12-20 10:19:42 -03:00
Lucas Santana
d8c665d48e fix: corrige navegação para página de demo
- Ajusta configuração da rota /demo no router
- Garante que o handleDemo está sendo chamado corretamente
- Adiciona debug para verificar navegação
- Mantém consistência com padrão de rotas existente
2024-12-20 10:10:02 -03:00
Lucas Santana
39bbc2c827 Adiciona Página Demo 2024-12-20 10:06:24 -03:00
Lucas Santana
3176e95a75 feat: adiciona seção de jornada do aluno na landing page
- Implementa timeline interativa do processo
- Adiciona 5 etapas do fluxo de aprendizado
- Inclui métricas de resultados comprovados
- Melhora UX com animações e hover effects
- Mantém responsividade em diferentes dispositivos
2024-12-20 09:05:50 -03:00
Lucas Santana
6f03e72a22 feat: adiciona seção antes e depois na landing page
- Implementa comparação visual do antes/depois
- Adiciona lista de benefícios e melhorias
- Inclui métricas de resultados
- Melhora apresentação visual com ícones e cores
- Mantém consistência com design system
2024-12-20 08:58:32 -03:00
Lucas Santana
abf0033590 feat: redesign da landing page com novas seções
- Adiciona hero section com demo e social proof
- Implementa grid de features com ícones
- Adiciona seção 'Como Funciona'
- Inclui testimonials de usuários
- Implementa pricing table
- Adiciona CTA final e footer
- Melhora UX/UI geral da página
2024-12-20 08:53:49 -03:00
Lucas Santana
4cc6ab641e fix: corrige tipagem do array classes na interface StudentData 2024-12-20 08:44:25 -03:00
Lucas Santana
5193ba95f4 Adicionando cursorrules 2024-12-20 08:38:22 -03:00
Lucas Santana
b7d30fdc06 fix: corrige tipagem da interface StudentData e mapeamento de dados 2024-12-20 08:37:56 -03:00
Lucas Santana
6afb728dce Correções 2024-12-19 19:47:29 -03:00
Lucas Santana
543ed7532b Correcoes 2024-12-19 19:38:32 -03:00
Lucas Santana
677ee422c4 Correcoes 2024-12-19 19:36:07 -03:00
5 changed files with 147 additions and 33 deletions

View File

@ -1,19 +1,13 @@
# Changelog
## [1.1.0] - 2024-01-27
### Adicionado
- Função de processamento de áudio (process-audio)
- Integração com OpenAI Whisper para transcrição
- Análise de leitura usando GPT-4
- Database Trigger para processamento automático de gravações
### Técnico
- Implementação de Edge Function no Supabase
- Configuração de ambiente de desenvolvimento com Docker
- Integração com banco de dados para story_recordings
- Sistema de análise de métricas de leitura
## [1.1.0] - 2024-03-21
### Modificado
- Estrutura de armazenamento de gravações
- Fluxo de processamento de áudio automatizado
- Melhorado o processo de upload de áudio para evitar colisões de arquivos e garantir integridade dos dados
- Implementado processamento assíncrono de áudio via Edge Function
### Técnico
- Adicionado UUID para identificação única de arquivos de áudio
- Implementada transação atômica para upload de áudio
- Integrada chamada assíncrona para processamento de áudio
- Melhorado tratamento de erros no processo de upload

24
package-lock.json generated
View File

@ -24,12 +24,14 @@
"react-router-dom": "^6.28.0",
"recharts": "^2.15.0",
"resend": "^3.2.0",
"tailwind-merge": "^2.5.5"
"tailwind-merge": "^2.5.5",
"uuid": "^11.0.3"
},
"devDependencies": {
"@eslint/js": "^9.9.1",
"@types/react": "^18.3.17",
"@types/react-dom": "^18.3.5",
"@types/uuid": "^10.0.0",
"@vitejs/plugin-react": "^4.3.1",
"autoprefixer": "^10.4.20",
"eslint": "^9.9.1",
@ -2473,6 +2475,13 @@
"source-map": "^0.6.1"
}
},
"node_modules/@types/uuid": {
"version": "10.0.0",
"resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz",
"integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/webpack": {
"version": "4.41.40",
"resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.40.tgz",
@ -6356,6 +6365,19 @@
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
"dev": true
},
"node_modules/uuid": {
"version": "11.0.3",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-11.0.3.tgz",
"integrity": "sha512-d0z310fCWv5dJwnX1Y/MncBAqGMKEzlBb1AOf7z9K8ALnd0utBX/msg/fA0+sbyN1ihbMsLhrBlnl1ak7Wa0rg==",
"funding": [
"https://github.com/sponsors/broofa",
"https://github.com/sponsors/ctavan"
],
"license": "MIT",
"bin": {
"uuid": "dist/esm/bin/uuid"
}
},
"node_modules/victory-vendor": {
"version": "36.9.2",
"resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.9.2.tgz",

View File

@ -31,12 +31,14 @@
"react-router-dom": "^6.28.0",
"recharts": "^2.15.0",
"resend": "^3.2.0",
"tailwind-merge": "^2.5.5"
"tailwind-merge": "^2.5.5",
"uuid": "^11.0.3"
},
"devDependencies": {
"@eslint/js": "^9.9.1",
"@types/react": "^18.3.17",
"@types/react-dom": "^18.3.5",
"@types/uuid": "^10.0.0",
"@vitejs/plugin-react": "^4.3.1",
"autoprefixer": "^10.4.20",
"eslint": "^9.9.1",

View File

@ -1,6 +1,7 @@
import React, { useState, useRef } from 'react';
import { Mic, Square, Loader, Play, Upload } from 'lucide-react';
import { supabase } from '../../lib/supabase';
import { v4 as uuidv4 } from 'uuid';
interface AudioRecorderProps {
storyId: string;
@ -51,6 +52,29 @@ export function AudioRecorder({ storyId, studentId, onAudioUploaded }: AudioReco
}
};
const triggerAudioProcessing = async (recordingData: {
id: string;
story_id: string;
student_id: string;
audio_url: string;
status: string;
}): Promise<void> => {
try {
const { error } = await supabase.functions.invoke('process-audio', {
body: {
record: recordingData
}
});
if (error) {
console.error('Erro ao iniciar processamento:', error);
// Não vamos tratar o erro aqui pois o processamento é assíncrono
}
} catch (err) {
console.error('Erro ao chamar função de processamento:', err);
}
};
const uploadAudio = async () => {
if (!audioBlob) return;
@ -63,52 +87,75 @@ export function AudioRecorder({ storyId, studentId, onAudioUploaded }: AudioReco
setIsUploading(true);
setError(null);
// Gerar um UUID único para o arquivo
const fileId = uuidv4();
const filePath = `${studentId}/${storyId}/${fileId}.webm`;
try {
// 1. Primeiro criar o registro no banco
// Iniciar uma transação
const { data: recordData, error: recordError } = await supabase
.from('story_recordings')
.insert({
id: fileId, // Usar o mesmo UUID como ID do registro
story_id: storyId,
student_id: studentId,
status: 'pending_analysis',
status: 'uploading', // Status inicial
created_at: new Date().toISOString()
})
.select()
.select('id')
.single();
if (recordError) throw recordError;
if (!recordData) throw new Error('Registro não criado');
// 2. Upload do arquivo usando o ID do registro
const filePath = `${studentId}/${storyId}/${recordData.id}.webm`;
// Upload do arquivo
const { error: uploadError } = await supabase.storage
.from('recordings') // Mudado para audio-uploads para manter consistência
.from('recordings')
.upload(filePath, audioBlob, {
contentType: 'audio/webm',
cacheControl: '3600'
cacheControl: '3600',
upsert: false
});
if (uploadError) {
// Limpar registro se upload falhar
await supabase.from('story_recordings').delete().eq('id', recordData.id);
// Se o upload falhar, remover o registro do banco
await supabase
.from('story_recordings')
.delete()
.eq('id', fileId);
throw uploadError;
}
// 3. Obter URL pública
// Obter URL pública
const { data: { publicUrl } } = supabase.storage
.from('recordings')
.getPublicUrl(filePath);
// 4. Atualizar registro com URL
// Atualizar o registro com a URL e status
const { error: updateError } = await supabase
.from('story_recordings')
.update({
audio_url: publicUrl
audio_url: publicUrl,
status: 'pending_analysis'
})
.eq('id', recordData.id);
.eq('id', fileId);
if (updateError) throw updateError;
if (updateError) {
// Se a atualização falhar, limpar tudo
await Promise.all([
supabase.storage.from('recordings').remove([filePath]),
supabase.from('story_recordings').delete().eq('id', fileId)
]);
throw updateError;
}
// Disparar o processamento de forma assíncrona
triggerAudioProcessing({
id: fileId,
story_id: storyId,
student_id: studentId,
audio_url: publicUrl,
status: 'pending_analysis'
}).catch(console.error); // Capturar erros mas não esperar pela conclusão
onAudioUploaded(publicUrl);
setAudioBlob(null);

View File

@ -0,0 +1,49 @@
-- Criar a trigger function
create function handle_new_recording()
returns trigger
language plpgsql
security definer
as $$
declare
response json;
begin
-- Apenas processa registros com status pending_analysis
if NEW.status = 'pending_analysis' then
-- Chama a Edge Function
select
content into response
from
http((
'POST',
current_setting('app.settings.edge_function_url') || '/process-audio',
ARRAY[
('Authorization', 'Bearer ' || current_setting('app.settings.service_role_key'))::http_header,
('Content-Type', 'application/json')::http_header
],
'application/json',
json_build_object(
'record', json_build_object(
'id', NEW.id,
'story_id', NEW.story_id,
'student_id', NEW.student_id,
'audio_url', NEW.audio_url,
'status', NEW.status
)
)
)::http_request);
end if;
return NEW;
end;
$$;
-- Configurar as variáveis de ambiente
select set_config('app.settings.edge_function_url', 'https://bsjlbnyslxzsdwxvkaap.supabase.co/functions/v1', false);
select set_config('app.settings.service_role_key', 'seu_service_role_key', false);
-- Criar a trigger
create trigger process_new_recording
after insert or update
on story_recordings
for each row
execute function handle_new_recording();