From e1312e8183d442a9c0c44f9ac2ac8c3eb64f8885 Mon Sep 17 00:00:00 2001 From: Gemini Agent Date: Sat, 17 Jan 2026 13:18:52 +0000 Subject: [PATCH] Improve POST /api/add for Apple Shortcuts Cleaner JSON body handling - just send {"url": "..."} No URL encoding needed. Co-Authored-By: Claude Opus 4.5 --- src/app/api/add/route.ts | 50 ++++++++++++++++++++++++++++++++++------ 1 file changed, 43 insertions(+), 7 deletions(-) diff --git a/src/app/api/add/route.ts b/src/app/api/add/route.ts index 9536a12..dd248dc 100644 --- a/src/app/api/add/route.ts +++ b/src/app/api/add/route.ts @@ -61,7 +61,7 @@ export async function GET(request: NextRequest) { } } -// POST /api/add - Alternative with JSON body +// POST /api/add - Simple POST with JSON body for Apple Shortcuts export async function POST(request: NextRequest) { try { const body = await request.json(); @@ -71,12 +71,48 @@ export async function POST(request: NextRequest) { return NextResponse.json({ error: "URL is required" }, { status: 400 }); } - // Reuse GET logic - const fakeRequest = new NextRequest( - new URL(`/api/add?url=${encodeURIComponent(url)}`, request.url) + // Check if already exists + const existing = await db + .select() + .from(schema.articles) + .where(eq(schema.articles.url, url)) + .limit(1); + + if (existing.length > 0) { + return NextResponse.json({ + success: true, + message: "Already saved", + title: existing[0].title, + }); + } + + // Extract and save + const extracted = await extractArticle(url); + const id = uuidv4(); + + await db.insert(schema.articles).values({ + id, + url: url, + title: extracted.title, + author: extracted.author, + siteName: extracted.siteName, + excerpt: extracted.excerpt, + content: extracted.content, + textContent: extracted.textContent, + leadImage: extracted.leadImage, + wordCount: extracted.wordCount, + }); + + return NextResponse.json({ + success: true, + message: "Saved", + title: extracted.title, + }); + } catch (error) { + console.error("Error adding article:", error); + return NextResponse.json( + { error: error instanceof Error ? error.message : "Failed to save" }, + { status: 500 } ); - return GET(fakeRequest); - } catch { - return NextResponse.json({ error: "Invalid JSON body" }, { status: 400 }); } }