From 496fb74fddf597d0f1352292b4bf866794e7d462 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Sat, 17 May 2025 00:30:20 +0000 Subject: [PATCH 1/3] feat(ai-database): add /[type]/[id] endpoint for getting or generating things (AI-83) Co-Authored-By: Nathan Clevenger --- .../ai-database/src/app/[type]/[id]/route.ts | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 packages/ai-database/src/app/[type]/[id]/route.ts diff --git a/packages/ai-database/src/app/[type]/[id]/route.ts b/packages/ai-database/src/app/[type]/[id]/route.ts new file mode 100644 index 00000000..5f56a662 --- /dev/null +++ b/packages/ai-database/src/app/[type]/[id]/route.ts @@ -0,0 +1,66 @@ +import config from '@payload-config' +import { waitUntil } from '@vercel/functions' +import { getPayload } from 'payload' + +export const maxDuration = 800 + +export async function GET(request: Request) { + const start = Date.now() + const { headers } = request + const { origin, searchParams, pathname } = new URL(request.url) + + const paths = pathname.split('/') + const id = paths.pop() || '' + const type = paths.pop() || '' + + const payload = await getPayload({ config }) + const { user } = await payload.auth({ headers }) + + try { + const thing = await payload.find({ + collection: 'things', + where: { + type: { equals: type }, + id: { equals: id } + } + }) + + if (thing.docs.length > 0) { + return Response.json({ + ...thing.docs[0], + $context: origin, + links: { + home: origin, + admin: origin + '/admin', + } + }) + } else { + const job = await payload.jobs.queue({ + workflow: 'generateThing', + input: { + id, + type + } + }) + + return Response.json({ + id, + type, + status: 'generating', + jobId: job.id, + message: 'Resource is being generated. Please check back soon.', + $context: origin, + links: { + home: origin, + admin: origin + '/admin', + job: `${origin}/admin/collections/payload-jobs/${job.id}`, + } + }, { status: 202 }) // 202 Accepted indicates the request has been accepted for processing + } + } catch (error) { + return Response.json({ + error: 'Failed to process request', + message: error.message, + }, { status: 500 }) + } +} From a56a933d707346922099399b0afc8737a8880b67 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Sat, 17 May 2025 00:35:24 +0000 Subject: [PATCH 2/3] fix(ai-database): update route handler to use correct Next.js 15+ function signature Co-Authored-By: Nathan Clevenger --- packages/ai-database/src/app/[type]/[id]/route.ts | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/ai-database/src/app/[type]/[id]/route.ts b/packages/ai-database/src/app/[type]/[id]/route.ts index 5f56a662..6f63b97b 100644 --- a/packages/ai-database/src/app/[type]/[id]/route.ts +++ b/packages/ai-database/src/app/[type]/[id]/route.ts @@ -4,14 +4,15 @@ import { getPayload } from 'payload' export const maxDuration = 800 -export async function GET(request: Request) { +export async function GET( + request: Request, + { params }: { params: Promise<{ type: string; id: string }> } +) { const start = Date.now() const { headers } = request - const { origin, searchParams, pathname } = new URL(request.url) + const { origin, searchParams } = new URL(request.url) - const paths = pathname.split('/') - const id = paths.pop() || '' - const type = paths.pop() || '' + const { type, id } = await params const payload = await getPayload({ config }) const { user } = await payload.auth({ headers }) From 18882bccd92daffd89a9464a0cbe72781c8de2c9 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Sat, 17 May 2025 01:58:20 +0000 Subject: [PATCH 3/3] fix(ai-database): update route handler to extract parameters from pathname Co-Authored-By: Nathan Clevenger --- packages/ai-database/src/app/[type]/[id]/route.ts | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/packages/ai-database/src/app/[type]/[id]/route.ts b/packages/ai-database/src/app/[type]/[id]/route.ts index 6f63b97b..5f56a662 100644 --- a/packages/ai-database/src/app/[type]/[id]/route.ts +++ b/packages/ai-database/src/app/[type]/[id]/route.ts @@ -4,15 +4,14 @@ import { getPayload } from 'payload' export const maxDuration = 800 -export async function GET( - request: Request, - { params }: { params: Promise<{ type: string; id: string }> } -) { +export async function GET(request: Request) { const start = Date.now() const { headers } = request - const { origin, searchParams } = new URL(request.url) + const { origin, searchParams, pathname } = new URL(request.url) - const { type, id } = await params + const paths = pathname.split('/') + const id = paths.pop() || '' + const type = paths.pop() || '' const payload = await getPayload({ config }) const { user } = await payload.auth({ headers })