Process audio

This commit is contained in:
Lucas Santana 2024-12-27 14:41:40 -03:00
parent ec97f640f9
commit 6cf273126e
2 changed files with 28 additions and 63 deletions

View File

@ -1,44 +0,0 @@
import { serve } from 'https://deno.land/std@0.168.0/http/server.ts'
import { processAudio } from './index.ts'
interface WebhookPayload {
type: 'INSERT' | 'UPDATE' | 'DELETE'
table: string
schema: string
record: {
id: string
story_id: string
student_id: string
audio_url: string
status: string
[key: string]: any
}
old_record: null | Record<string, any>
}
serve(async (req) => {
try {
const payload: WebhookPayload = await req.json()
// Verifica se é uma inserção em story_recordings
if (
payload.type === 'INSERT' &&
payload.table === 'story_recordings' &&
payload.schema === 'public' &&
payload.record.status === 'pending_analysis'
) {
await processAudio(payload.record)
}
return new Response(JSON.stringify({ success: true }), {
headers: { 'Content-Type': 'application/json' }
})
} catch (error) {
console.error('Hook error:', error)
return new Response(
JSON.stringify({ error: error.message }),
{ status: 500, headers: { 'Content-Type': 'application/json' } }
)
}
})

View File

@ -72,6 +72,7 @@ serve(async (req) => {
) )
const audioRecord = data.record as AudioRecord const audioRecord = data.record as AudioRecord
console.log('AudioRecord', audioRecord)
// 1. Atualiza status para processing // 1. Atualiza status para processing
await supabase await supabase
@ -84,30 +85,38 @@ serve(async (req) => {
// 3. Analisa a leitura // 3. Analisa a leitura
const analysis = await analyzeReading(transcription, audioRecord.story_id) const analysis = await analyzeReading(transcription, audioRecord.story_id)
console.log('Análise concluída', analysis)
// 4. Atualiza o registro com os resultados // 4. Atualiza o registro com os resultados
const { error: updateError } = await supabase const updateData = {
.from('story_recordings')
.update({
status: 'completed', status: 'completed',
transcription, transcription,
processed_at: new Date().toISOString(), processed_at: new Date().toISOString(),
fluency_score: analysis.fluency_score, fluency_score: analysis.fluency_score || 0,
pronunciation_score: analysis.pronunciation_score, pronunciation_score: analysis.pronunciation_score || 0,
accuracy_score: analysis.accuracy_score, accuracy_score: analysis.accuracy_score || 0,
comprehension_score: analysis.comprehension_score, comprehension_score: analysis.comprehension_score || 0,
words_per_minute: analysis.words_per_minute, words_per_minute: analysis.words_per_minute || 0,
pause_count: analysis.pause_count, pause_count: analysis.pause_count || 0,
error_count: analysis.error_count, error_count: analysis.error_count || 0,
self_corrections: analysis.self_corrections, self_corrections: analysis.self_corrections || 0,
strengths: analysis.strengths, strengths: Array.isArray(analysis.strengths) ? analysis.strengths : [],
improvements: analysis.improvements, improvements: Array.isArray(analysis.improvements) ? analysis.improvements : [],
suggestions: analysis.suggestions, suggestions: analysis.suggestions || '',
analysis: analysis.raw_data analysis: JSON.stringify(analysis.raw_data)
}) }
console.log('Dados para atualização:', updateData)
const { error: updateError } = await supabase
.from('story_recordings')
.update(updateData)
.eq('id', audioRecord.id) .eq('id', audioRecord.id)
if (updateError) throw updateError if (updateError) {
console.error('Erro na atualização:', updateError)
throw updateError
}
return new Response( return new Response(
JSON.stringify({ JSON.stringify({
@ -136,7 +145,7 @@ serve(async (req) => {
status: 'error', status: 'error',
error_message: error.message error_message: error.message
}) })
.eq('id', data.record.id) .eq('id', audioRecord.id)
} }
return new Response( return new Response(