Files
waooplus/src/app/api/asset-hub/ai-modify-prop/route.ts

59 lines
1.9 KiB
TypeScript

import { NextRequest } from 'next/server'
import { prisma } from '@/lib/prisma'
import { requireUserAuth, isErrorResponse } from '@/lib/api-auth'
import { apiHandler, ApiError } from '@/lib/api-errors'
import { TASK_TYPE } from '@/lib/task/types'
import { maybeSubmitLLMTask } from '@/lib/llm-observe/route-task'
export const POST = apiHandler(async (request: NextRequest) => {
const authResult = await requireUserAuth()
if (isErrorResponse(authResult)) return authResult
const { session } = authResult
const payload = await request.json().catch(() => ({}))
const propId = typeof payload?.propId === 'string' ? payload.propId.trim() : ''
const variantId = typeof payload?.variantId === 'string' ? payload.variantId.trim() : ''
const currentDescription = typeof payload?.currentDescription === 'string' ? payload.currentDescription.trim() : ''
const modifyInstruction = typeof payload?.modifyInstruction === 'string' ? payload.modifyInstruction.trim() : ''
if (!propId || !currentDescription || !modifyInstruction) {
throw new ApiError('INVALID_PARAMS')
}
const prop = await prisma.globalLocation.findFirst({
where: {
id: propId,
userId: session.user.id,
assetKind: 'prop',
},
select: {
id: true,
name: true,
},
})
if (!prop) {
throw new ApiError('NOT_FOUND')
}
const asyncTaskResponse = await maybeSubmitLLMTask({
request,
userId: session.user.id,
projectId: 'global-asset-hub',
type: TASK_TYPE.ASSET_HUB_AI_MODIFY_PROP,
targetType: 'GlobalLocation',
targetId: variantId || propId,
routePath: '/api/asset-hub/ai-modify-prop',
body: {
propId,
propName: prop.name,
variantId: variantId || undefined,
currentDescription,
modifyInstruction,
},
dedupeKey: `asset_hub_ai_modify_prop:${propId}:${variantId || 'default'}`,
})
if (asyncTaskResponse) return asyncTaskResponse
throw new ApiError('INVALID_PARAMS')
})