diff --git a/src/app/api/urls/[encodedUrl]/properties/[property]/route.ts b/src/app/api/urls/[encodedUrl]/properties/[property]/route.ts index 33c8f44..1312d6c 100644 --- a/src/app/api/urls/[encodedUrl]/properties/[property]/route.ts +++ b/src/app/api/urls/[encodedUrl]/properties/[property]/route.ts @@ -1,4 +1,3 @@ -//Handles DELETE requests for specific properties import { NextRequest, NextResponse } from 'next/server'; import { deletePropertyByUrl } from '@/lib/database'; @@ -7,36 +6,42 @@ export async function DELETE( request: NextRequest, { params }: { params: { encodedUrl: string; property: string } } ) { - const url = decodeURIComponent(params.encodedUrl); - const property = decodeURIComponent(params.property); - - console.log('[API] Deleting property', property, 'from URL', url); - try { - if (!property) { + const url = decodeURIComponent(params.encodedUrl); + const property = decodeURIComponent(params.property); + + console.log('[API] DELETE request - URL:', url, 'Property:', property); + + if (!url || !property) { + console.log('[API] Missing required parameters'); return NextResponse.json( - { error: 'Property name is required' }, + { error: 'URL and property name are required' }, { status: 400 } ); } + console.log('[API] Calling deletePropertyByUrl...'); await deletePropertyByUrl(url, property); - console.log('[API] Successfully deleted property:', property); + console.log('[API] Successfully deleted property:', property, 'from URL:', url); return NextResponse.json( - { message: 'Property deleted', property: property }, + { + message: 'Property deleted successfully', + property: property, + url: url + }, { status: 200 } ); } catch (error) { - console.log('[API] Delete error:', error); + console.error('[API] Delete error:', error); return NextResponse.json( { error: 'Failed to delete property', details: error instanceof Error ? error.message : 'Unknown error', - property: property, - url: url + property: params.property, + url: params.encodedUrl }, { status: 500 } ); diff --git a/src/app/api/urls/[encodedUrl]/properties/route.ts b/src/app/api/urls/[encodedUrl]/properties/route.ts index 2d82fda..61462f0 100644 --- a/src/app/api/urls/[encodedUrl]/properties/route.ts +++ b/src/app/api/urls/[encodedUrl]/properties/route.ts @@ -7,12 +7,12 @@ export async function GET( request: NextRequest, { params }: { params: Promise<{ encodedUrl: string }> } ) { - // Await params before accessing properties - const resolvedParams = await params; - const url = decodeURIComponent(resolvedParams.encodedUrl); - console.log('[API] Getting selected properties for URL:', url); - try { + // Await params before accessing properties + const resolvedParams = await params; + const url = decodeURIComponent(resolvedParams.encodedUrl); + console.log('[API] Getting selected properties for URL:', url); + const properties = await getSelectedProperties(url); console.log('[API] Returning', properties.length, 'properties for URL:', url); @@ -23,6 +23,8 @@ export async function GET( }, }); } catch (error) { + const resolvedParams = await params; + const url = decodeURIComponent(resolvedParams.encodedUrl); console.error('[API] Failed to fetch properties for URL:', url, error); return NextResponse.json( @@ -41,11 +43,11 @@ export async function POST( request: NextRequest, { params }: { params: Promise<{ encodedUrl: string }> } ) { - // Await params before accessing properties - const resolvedParams = await params; - const url = decodeURIComponent(resolvedParams.encodedUrl); - try { + // Await params before accessing properties + const resolvedParams = await params; + const url = decodeURIComponent(resolvedParams.encodedUrl); + const property: string = await request.json(); console.log('[API] Adding property', property, 'to URL', url); @@ -65,14 +67,20 @@ export async function POST( // Add the selected property await addSelectedProperty(url, property); - console.log('[API] Successfully added property:', property); + console.log('[API] Successfully added property:', property, 'to URL:', url); return NextResponse.json( - { message: 'Property added', property: property }, + { + message: 'Property added successfully', + property: property, + url: url + }, { status: 200 } ); } catch (error) { - console.log('[API] Error adding property:', error); + const resolvedParams = await params; + const url = decodeURIComponent(resolvedParams.encodedUrl); + console.error('[API] Error adding property:', error); return NextResponse.json( { diff --git a/src/lib/database.ts b/src/lib/database.ts index 357cea3..87fbad8 100644 --- a/src/lib/database.ts +++ b/src/lib/database.ts @@ -250,7 +250,7 @@ export async function deleteItemByUrl(url: string, itemId: string): Promise { - console.log(`[DB] Soft deleting property ${propertyName} for URL: ${url}`); + console.log(`[DB] Starting soft delete of property ${propertyName} for URL: ${url}`); await withTransaction(async (tx) => { // Get URL ID @@ -259,25 +259,44 @@ export async function deletePropertyByUrl(url: string, propertyName: string): Pr }); if (!urlRecord) { + console.error(`[DB] URL not found: ${url}`); throw new Error(`URL not found: ${url}`); } + console.log(`[DB] Found URL record with ID: ${urlRecord.id}`); + // Get property ID const property = await tx.property.findUnique({ where: { name: propertyName } }); if (!property) { + console.error(`[DB] Property not found: ${propertyName}`); throw new Error(`Property not found: ${propertyName}`); } + console.log(`[DB] Found property record with ID: ${property.id}`); + + // Remove from selected properties first + const deletedSelectedProperties = await tx.selectedProperty.deleteMany({ + where: { + urlId: urlRecord.id, + propertyId: property.id + } + }); + + console.log(`[DB] Removed ${deletedSelectedProperties.count} selected property records`); + // Get all global item IDs for this URL const items = await tx.item.findMany({ where: { urlId: urlRecord.id }, select: { globalItemId: true } }); + console.log(`[DB] Found ${items.length} items for URL`); + // Insert into deleted_properties for each global item + let deletedPropertiesCount = 0; for (const item of items) { await tx.deletedProperty.upsert({ where: { @@ -294,9 +313,11 @@ export async function deletePropertyByUrl(url: string, propertyName: string): Pr propertyId: property.id } }); + deletedPropertiesCount++; } - console.log(`[DB] Property ${propertyName} soft deleted for URL: ${url}`); + console.log(`[DB] Created/updated ${deletedPropertiesCount} deleted property records`); + console.log(`[DB] Successfully soft deleted property ${propertyName} for URL: ${url}`); }); }