refactor: use PostgreSQL trigger for status sync instead of manual cache update
Core Team implemented PostgreSQL trigger (sync_video_status) that automatically syncs videos.status when monitor_jobs.status changes. Removed frontend workaround that manually updated filesCache/fileStatusCache. Now ctxPause/batchPause call loadFiles() + loadPausedFiles() after success to get the properly synced status from backend.
This commit is contained in:
@@ -2279,28 +2279,20 @@ async function ctxPause(f: any) {
|
|||||||
if (!f?.file_uuid) { console.error('[ctxPause] no file_uuid'); return }
|
if (!f?.file_uuid) { console.error('[ctxPause] no file_uuid'); return }
|
||||||
try {
|
try {
|
||||||
const base = getApiBase()
|
const base = getApiBase()
|
||||||
const url = `${base}/api/v1/jobs/${f.file_uuid}/pause`
|
const res = await fetch(`${base}/api/v1/jobs/${f.file_uuid}/pause`, { method: 'POST' })
|
||||||
console.log('[ctxPause] calling:', url)
|
|
||||||
const res = await fetch(url, { method: 'POST' })
|
|
||||||
console.log('[ctxPause] response status:', res.status)
|
|
||||||
if (res.ok) {
|
if (res.ok) {
|
||||||
pausedFileUuids.value = new Set(pausedFileUuids.value).add(f.file_uuid)
|
pausedFileUuids.value = new Set(pausedFileUuids.value).add(f.file_uuid)
|
||||||
// Manually update file status in cache (backend pause only updates monitor_jobs, not videos table)
|
// Reload files to get synced status from backend (PostgreSQL trigger syncs videos.status)
|
||||||
const file = filesCache.value.find((x: any) => x.file_uuid === f.file_uuid)
|
await loadFiles()
|
||||||
if (file) {
|
await loadPausedFiles()
|
||||||
file.status = 'paused'
|
|
||||||
fileStatusCache.value[f.file_uuid] = 'paused'
|
|
||||||
}
|
|
||||||
actionMsg.value = `⏸ Paused: ${f.file_name}`
|
actionMsg.value = `⏸ Paused: ${f.file_name}`
|
||||||
console.log('[ctxPause] success, status updated to paused')
|
|
||||||
} else {
|
} else {
|
||||||
const err = await res.json().catch(() => ({}))
|
const err = await res.json().catch(() => ({}))
|
||||||
actionMsg.value = `Pause failed: ${err.error || res.statusText}`
|
actionMsg.value = `Pause failed: ${err.error || res.statusText}`
|
||||||
console.error('[ctxPause] failed:', err)
|
|
||||||
}
|
}
|
||||||
} catch (e: any) {
|
} catch (e: any) {
|
||||||
actionMsg.value = `Pause error: ${e.message}`
|
actionMsg.value = `Pause error: ${e.message}`
|
||||||
console.error('[ctxPause] error:', e)
|
console.error('[ctxPause]', e)
|
||||||
}
|
}
|
||||||
setTimeout(() => { actionMsg.value = '' }, 5000)
|
setTimeout(() => { actionMsg.value = '' }, 5000)
|
||||||
}
|
}
|
||||||
@@ -2342,12 +2334,6 @@ async function batchPause() {
|
|||||||
try {
|
try {
|
||||||
const res = await fetch(`${base}/api/v1/jobs/${f.file_uuid}/pause`, { method: 'POST' })
|
const res = await fetch(`${base}/api/v1/jobs/${f.file_uuid}/pause`, { method: 'POST' })
|
||||||
if (res.ok) {
|
if (res.ok) {
|
||||||
// Manually update status in cache
|
|
||||||
const file = filesCache.value.find((x: any) => x.file_uuid === f.file_uuid)
|
|
||||||
if (file) {
|
|
||||||
file.status = 'paused'
|
|
||||||
fileStatusCache.value[f.file_uuid] = 'paused'
|
|
||||||
}
|
|
||||||
successCount++
|
successCount++
|
||||||
} else {
|
} else {
|
||||||
failCount++
|
failCount++
|
||||||
@@ -2360,10 +2346,10 @@ async function batchPause() {
|
|||||||
|
|
||||||
await Promise.all(filesToPause.map(f => limit(() => pauseFile(f))))
|
await Promise.all(filesToPause.map(f => limit(() => pauseFile(f))))
|
||||||
|
|
||||||
// Update paused set for reactivity
|
|
||||||
pausedFileUuids.value = new Set(pausedFileUuids.value)
|
|
||||||
|
|
||||||
if (successCount > 0) {
|
if (successCount > 0) {
|
||||||
|
// Reload files to get synced status from backend (PostgreSQL trigger syncs videos.status)
|
||||||
|
await loadFiles()
|
||||||
|
await loadPausedFiles()
|
||||||
actionMsg.value = `⏸ Paused ${successCount} files${failCount > 0 ? `, ${failCount} failed` : ''}`
|
actionMsg.value = `⏸ Paused ${successCount} files${failCount > 0 ? `, ${failCount} failed` : ''}`
|
||||||
} else {
|
} else {
|
||||||
actionMsg.value = `Failed to pause all ${failCount} files`
|
actionMsg.value = `Failed to pause all ${failCount} files`
|
||||||
|
|||||||
Reference in New Issue
Block a user