59 lines
1.9 KiB
TypeScript
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')
|
|
})
|