export default defineEventHandler(async event => { // 获取任务列表的状态进度(普通用户只能看到自己的) if (event.node.req.method === 'GET') { let {status, model, uid, bot} = getQuery(event) let tasks = await useStorage().getKeys().then((keys: any[]) => keys.filter(key => key.startsWith('task:'))) tasks = await Promise.all(tasks.map(async (key: any) => await useStorage().getItem(key))) // 读取所有任务的数据 tasks.sort((a: any, b: any) => a.createdAt - b.createdAt) // 按照创建时间排序 if (tasks.length === 0) return [] // 如果没有任务,直接返回空数组 if (status) tasks = tasks.filter((task: any) => task.status === status) // 筛选出指定状态的任务 if (model) tasks = tasks.filter((task: any) => task.model === model) // 筛选出指定model的任务 if (uid) tasks = tasks.filter((task: any) => task.uid === uid) // 筛选出指定用户的任务 if (bot) { tasks = tasks.filter((task: any) => task.model === tasks[0].model) // 筛选出首位model的任务 tasks.forEach(async (task: any) => { task.status = 'processing' await useStorage().setItem(`task:${task.tid}`, task) }) } return tasks } // 修改任务状态(仅限bot访问) if (event.node.req.method === 'PATCH') { let { ids } = await readBody(event) // 取出ids对应的任务 let tasks = await Promise.all(ids.map(async (id: any) => await useStorage().getItem(`task:${id}`))) // 修改任务状态 tasks.forEach(async (task: any) => { task.status = 'finished' await useStorage().setItem(`task:${task.tid}`, task) }) return tasks } // 添加任务到队列(生成一个32位随机字符串作为任务ID) if (event.node.req.method === 'POST') { event.context.body = await readBody(event) // 读取body数据到 event.context.body.tid = Math.random().toString(36).substring(2, 34) event.context.body.uid = 1234567890 // 默认用户ID event.context.body.status = 'waiting' // 默认当前状态 event.context.body.createdAt = new Date().getTime() // 设定创建时间 await useStorage().setItem(`task:${event.context.body.tid}`, event.context.body) // 筛选出所有的任务(并打印) let tasks = await useStorage().getKeys().then((keys: any[]) => keys.filter(key => key.startsWith('task:'))) console.log(tasks) // 如果无需排队,直接返回结果, 否则返回任务排队状态(预估等待时间) return event.context.body } })