import { listShotQueues, summarizeQueue } from '~/server/utils/shotQueue' import { isStudioQueuePaused, listStudioJobs, summarizeStudioJob } from '~/server/utils/studioQueue' export default defineEventHandler((event) => { const { owner } = assertLibraryOwner(event) const full = String(getQuery(event).full || '') === '1' const active = listStudioJobs(owner) .filter(job => job.status === 'waiting' || job.status === 'running' || job.status === 'held') const claimed = new Set(active.map(job => job.shotQueueId).filter(Boolean) as string[]) const queues = listShotQueues(owner) const byId = new Map(queues.map(queue => [queue.id, queue])) const jobs = active.map((job) => { const shots = job.shotQueueId ? byId.get(job.shotQueueId) || null : null const shotSummary = shots ? summarizeQueue(shots) : null const plannedShots = shotSummary ? undefined : [ { prompt: job.payload.prompt, duration: job.payload.duration }, ...(job.payload.extensions || []) ] return { ...summarizeStudioJob(job), ...(full ? { shots: shotSummary, plannedShots: plannedShots && plannedShots.length > 1 ? plannedShots : undefined } : {}), completedCount: shotSummary?.completedCount || 0, pendingCount: shotSummary?.pendingCount ?? job.shotCount } }) return { jobs, orphans: full ? queues .filter(queue => !claimed.has(queue.id) && queue.status !== 'complete') .map(summarizeQueue) : [], waitingCount: jobs.filter(job => job.status === 'waiting').length, paused: isStudioQueuePaused(owner) } })