linguaielts-api / fronted /src /services /shadowingService.js
AnhviNguyen
Forecast, dashboard, pronunciation, nginx fixes (exclude large ML weights)
3092643
Raw
History Blame Contribute Delete
1.77 kB
/**
* Shadowing API — YouTube transcript pipeline.
*/
import apiClient from '@/api/client.js'
import { pollTaskResult } from '@/utils/taskPolling.js'
export function processVideo(url, { level = 'Intermediate', translate = true } = {}) {
return apiClient
.post('/shadowing/video/process', { url, level, translate }, { timeout: 300000 })
.then(async ({ data }) => {
if (data.task_id) {
return pollTaskResult(`/shadowing/video/process/result/${data.task_id}`, {
timeoutMs: 300000,
})
}
return data
})
}
export function getVideo(videoId) {
return apiClient.get(`/shadowing/video/${videoId}`).then((r) => r.data)
}
export function getShadowingHistory(limit = 30) {
return apiClient
.get('/shadowing/history', { params: { limit } })
.then((r) => r.data.items || [])
}
export function touchShadowingHistory(videoId) {
return apiClient.post(`/shadowing/history/${videoId}/touch`).then((r) => r.data)
}
export function updateShadowingHistory(videoId, { title, level } = {}) {
return apiClient
.patch(`/shadowing/history/${videoId}`, { title, level })
.then((r) => r.data)
}
export function deleteShadowingHistory(videoId) {
return apiClient.delete(`/shadowing/history/${videoId}`).then((r) => r.data)
}
export function checkPronunciation(audioBlob, targetText) {
const fd = new FormData()
fd.append('file', audioBlob, 'recording.webm')
fd.append('target_text', targetText)
return apiClient
.post('/shadowing/pronunciation/check', fd, {
timeout: 120000,
transformRequest: [
(data, headers) => {
delete headers['Content-Type']
delete headers['content-type']
return data
},
],
})
.then((r) => r.data)
}