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