mirror of
https://github.com/lucasrcsantana/story-generator.git
synced 2025-12-17 05:47:52 +00:00
Process audio
This commit is contained in:
parent
ec97f640f9
commit
6cf273126e
@ -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' } }
|
|
||||||
)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
@ -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 updateData = {
|
||||||
|
status: 'completed',
|
||||||
|
transcription,
|
||||||
|
processed_at: new Date().toISOString(),
|
||||||
|
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
|
const { error: updateError } = await supabase
|
||||||
.from('story_recordings')
|
.from('story_recordings')
|
||||||
.update({
|
.update(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
|
|
||||||
})
|
|
||||||
.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(
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user