16 lines
1.0 KiB
TypeScript

import { z } from 'zod'
import { assertDetailGeneratorUser, DetailGeneratorError } from './access'
import { detailPublicJob, findDetailJob, prepareDetailTextRecovery } from './repository'
import { processDetailJob } from './jobs'
const inputSchema = z.object({ action: z.enum(['query', 'continue']), requestId: z.string().uuid().optional() }).strict().refine(value => value.action !== 'continue' || value.requestId === undefined)
export async function recoverDetailTextJob(ownerId: string, id: string, body: unknown) {
await assertDetailGeneratorUser(ownerId)
const parsed = inputSchema.safeParse(body)
if (!parsed.success) throw new DetailGeneratorError('恢复参数无效,请选择查询原结果或继续文案')
const current = await prepareDetailTextRecovery(id, ownerId, parsed.data.action, parsed.data.requestId)
if (parsed.data.action === 'query' && current.status === 'running' && current.leaseToken) await processDetailJob(current)
await assertDetailGeneratorUser(ownerId)
return { job: detailPublicJob(await findDetailJob(id, ownerId)) }
}