//Handles DELETE requests for specific items import { NextRequest, NextResponse } from 'next/server'; import { deleteItemByUrl, insertItemByUrl } from '@/lib/database'; import { Item } from '@/types/database'; // PUT /api/urls/[encodedUrl]/items/[itemId] - Update a specific item export async function PUT( request: NextRequest, { params }: { params: { encodedUrl: string; itemId: string } } ) { try { const { encodedUrl, itemId } = params; const url = decodeURIComponent(encodedUrl); const item: Item = await request.json(); console.log('[API] Updating item', itemId, 'for URL', url); // Validate that the item ID matches the URL parameter if (item.id !== itemId) { return NextResponse.json( { error: 'Item ID mismatch' }, { status: 400 } ); } // Validate required fields if (!item.id) { return NextResponse.json( { error: 'Item ID is required' }, { status: 400 } ); } // Ensure name and description are strings const sanitizedItem: Item = { ...item, name: item.name || '', description: item.description || '', customProperties: item.customProperties || {} }; await insertItemByUrl(url, sanitizedItem); console.log('[API] Successfully updated item:', itemId); return NextResponse.json({ success: true, itemId }); } catch (error) { console.error('[API] Update error:', error); return NextResponse.json( { error: 'Database error', details: error instanceof Error ? error.message : 'Unknown error', itemId: params.itemId, url: decodeURIComponent(params.encodedUrl) }, { status: 500 } ); } } // DELETE /api/urls/[encodedUrl]/items/[itemId] - Delete a specific item export async function DELETE( request: NextRequest, { params }: { params: { encodedUrl: string; itemId: string } } ) { const url = decodeURIComponent(params.encodedUrl); const itemId = params.itemId; console.log('[API] Deleting item', itemId, 'from URL', url); try { if (!itemId) { return NextResponse.json( { error: 'Item ID is required' }, { status: 400 } ); } await deleteItemByUrl(url, itemId); console.log('[API] Successfully deleted item:', itemId); return NextResponse.json( { message: 'Item deleted', itemId: itemId }, { status: 200 } ); } catch (error) { console.log('[API] Delete error:', error); return NextResponse.json( { error: 'Failed to delete item', details: error instanceof Error ? error.message : 'Unknown error', itemId: itemId, url: url }, { status: 500 } ); } }