Files
drawing/server/api/drawing.ts
2023-02-14 01:31:09 +08:00

59 lines
2.6 KiB
TypeScript

export default defineEventHandler(async event => {
event.context.query = getQuery(event)
// 获取任务列表的状态进度(普通用户只能看到自己的)
if (event.node.req.method === 'GET') {
const task = await useStorage().getKeys().then((keys: any[]) => keys.filter(key => key.startsWith('task:')))
return task
}
// 抽取一组任务(优先排队最前的任务的同model的任务)
if (event.node.req.method === 'PATCH') {
// 筛选出所有的任务(并打印)
let tasks = await useStorage().getKeys().then((keys: any[]) => keys.filter(key => key.startsWith('task:')))
console.log(tasks)
tasks = await Promise.all(tasks.map(async (key: any) => await useStorage().getItem(key))) // 读取所有任务的数据
tasks = tasks.filter((task: any) => task.status === 'waiting') // 筛选出等待状态的任务
tasks = tasks.sort((a: any, b: any) => a.createdAt - b.createdAt) // 按照创建时间排序
console.log(tasks)
if (tasks.length === 0) {
return { 'tasks': [] }
}
// 筛选出第一个任务的model
let model = tasks[0].model
// 筛选出所有model相同的任务
tasks = tasks.filter((task: any) => task.model === model)
console.log(tasks)
// 将抽取到的任务从队列中改变状态
for (let task of tasks) {
task.status = 'processing'
await useStorage().setItem(`task:${task.tid}`, task)
}
// 返回排队的任务
return { 'tasks': 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.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
}
// 逐删除自己的指定任务(普通用户只能删除自己的)
if (event.node.req.method === 'DELETE') {
await useStorage().removeItem(`task:${event.context.query.tid}`)
return { 'message': 'ok' }
}
})