bot取任务
This commit is contained in:
@@ -1,38 +1,36 @@
|
|||||||
export default defineEventHandler(async event => {
|
export default defineEventHandler(async event => {
|
||||||
event.context.query = getQuery(event)
|
|
||||||
|
|
||||||
// 获取任务列表的状态进度(普通用户只能看到自己的)
|
// 获取任务列表的状态进度(普通用户只能看到自己的)
|
||||||
if (event.node.req.method === 'GET') {
|
if (event.node.req.method === 'GET') {
|
||||||
const task = await useStorage().getKeys().then((keys: any[]) => keys.filter(key => key.startsWith('task:')))
|
let {status, model, uid, bot} = getQuery(event)
|
||||||
return task
|
let tasks = await useStorage().getKeys().then((keys: any[]) => keys.filter(key => key.startsWith('task:')))
|
||||||
|
if (tasks.length === 0) return [] // 如果没有任务,直接返回空数组
|
||||||
|
tasks = await Promise.all(tasks.map(async (key: any) => await useStorage().getItem(key))) // 读取所有任务的数据
|
||||||
|
tasks.sort((a: any, b: any) => a.createdAt - b.createdAt) // 按照创建时间排序
|
||||||
|
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
|
||||||
}
|
}
|
||||||
|
|
||||||
// 抽取一组任务(优先排队最前的任务的同model的任务)
|
// 修改任务状态(仅限bot访问)
|
||||||
if (event.node.req.method === 'PATCH') {
|
if (event.node.req.method === 'PATCH') {
|
||||||
// 筛选出所有的任务(并打印)
|
let { ids } = await readBody(event)
|
||||||
let tasks = await useStorage().getKeys().then((keys: any[]) => keys.filter(key => key.startsWith('task:')))
|
// 取出ids对应的任务
|
||||||
console.log(tasks)
|
let tasks = await Promise.all(ids.map(async (id: any) => await useStorage().getItem(`task:${id}`)))
|
||||||
tasks = await Promise.all(tasks.map(async (key: any) => await useStorage().getItem(key))) // 读取所有任务的数据
|
// 修改任务状态
|
||||||
tasks = tasks.filter((task: any) => task.status === 'waiting') // 筛选出等待状态的任务
|
tasks.forEach(async (task: any) => {
|
||||||
tasks = tasks.sort((a: any, b: any) => a.createdAt - b.createdAt) // 按照创建时间排序
|
task.status = 'finished'
|
||||||
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)
|
await useStorage().setItem(`task:${task.tid}`, task)
|
||||||
}
|
})
|
||||||
// 返回排队的任务
|
return tasks
|
||||||
return { 'tasks': tasks }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 添加任务到队列(生成一个32位随机字符串作为任务ID)
|
// 添加任务到队列(生成一个32位随机字符串作为任务ID)
|
||||||
@@ -49,10 +47,4 @@ export default defineEventHandler(async event => {
|
|||||||
return event.context.body
|
return event.context.body
|
||||||
}
|
}
|
||||||
|
|
||||||
// 逐删除自己的指定任务(普通用户只能删除自己的)
|
|
||||||
if (event.node.req.method === 'DELETE') {
|
|
||||||
await useStorage().removeItem(`task:${event.context.query.tid}`)
|
|
||||||
return { 'message': 'ok' }
|
|
||||||
}
|
|
||||||
|
|
||||||
})
|
})
|
||||||
|
Reference in New Issue
Block a user