16 lines
1.0 KiB
TypeScript
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)) }
|
|
}
|