import { records, saveRecord } from '../../utils/studio2/store' import { dismissFinishedStudioJobs, dismissStudioJob, listStudioJobs } from '../../utils/studioQueue' export default defineEventHandler(async (event) => { const { owner } = assertLibraryOwner(event) const body = await readBody<{ id?: string }>(event).catch(() => ({} as { id?: string })) const queue = listStudioJobs(owner) let cleared = 0 if (body?.id) { const row = queue.find(job => job.id === body.id) if (!row) throw createError({ statusCode: 404, statusMessage: 'Queued job not found' }) try { assertFolderAccess(event, row.payload.folderId) } catch { throw createError({ statusCode: 403, statusMessage: 'Folder locked' }) } await dismissStudioJob(owner, body.id) return { cleared: 1 } } for (const r of records(owner)) { try { assertFolderAccess(event, r.request.folderId) } catch { continue } const status = queue.find(q => q.id === r.queueId)?.status if (['complete', 'failed', 'cancelled'].includes(r.state) || ['cancelled', 'error'].includes(status || '')) { r.dismissed = true saveRecord(r) cleared++ } } // Caption (and other finished studio-queue) cards — hide from Queue, keep resultText on the row const finishedIds = queue .filter(job => !job.dismissed && ['complete', 'error', 'cancelled'].includes(job.status)) .filter(job => { try { assertFolderAccess(event, job.payload.folderId); return true } catch { return false } }) .map(job => job.id) cleared += await dismissFinishedStudioJobs(owner, finishedIds) return { cleared } })