mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-28 04:27:00 -05:00
88 lines
2.4 KiB
TypeScript
88 lines
2.4 KiB
TypeScript
import { NextResponse } from 'next/server';
|
|
import { Prisma } from '@prisma/client';
|
|
import prisma from '@/lib/prisma';
|
|
|
|
export async function GET(request: Request) {
|
|
try {
|
|
// Test raw query first
|
|
try {
|
|
console.log('Testing database connection...');
|
|
const rawResult = await prisma.$queryRaw`SELECT tablename FROM pg_catalog.pg_tables WHERE schemaname = 'public'`;
|
|
console.log('Available tables:', rawResult);
|
|
} catch (connectionError) {
|
|
console.error('Raw query test failed:', connectionError);
|
|
throw new Error('Database connection test failed');
|
|
}
|
|
|
|
// Basic query with explicit types
|
|
try {
|
|
const queryResult = await prisma.$transaction(async (tx) => {
|
|
// Count total parks
|
|
const totalCount = await tx.park.count();
|
|
console.log('Total parks count:', totalCount);
|
|
|
|
// Fetch parks with minimal fields
|
|
const parks = await tx.park.findMany({
|
|
take: 10,
|
|
select: {
|
|
id: true,
|
|
name: true,
|
|
slug: true,
|
|
status: true,
|
|
owner: {
|
|
select: {
|
|
id: true,
|
|
name: true
|
|
}
|
|
}
|
|
},
|
|
orderBy: {
|
|
name: 'asc'
|
|
}
|
|
} satisfies Prisma.ParkFindManyArgs);
|
|
|
|
return { totalCount, parks };
|
|
});
|
|
|
|
return NextResponse.json({
|
|
success: true,
|
|
data: queryResult.parks,
|
|
meta: {
|
|
total: queryResult.totalCount
|
|
}
|
|
});
|
|
|
|
} catch (queryError) {
|
|
if (queryError instanceof Prisma.PrismaClientKnownRequestError) {
|
|
console.error('Known Prisma error:', {
|
|
code: queryError.code,
|
|
meta: queryError.meta,
|
|
message: queryError.message
|
|
});
|
|
throw new Error(`Database query failed: ${queryError.code}`);
|
|
}
|
|
throw queryError;
|
|
}
|
|
|
|
} catch (error) {
|
|
console.error('Error in /api/parks:', {
|
|
name: error instanceof Error ? error.name : 'Unknown',
|
|
message: error instanceof Error ? error.message : 'Unknown error',
|
|
stack: error instanceof Error ? error.stack : undefined
|
|
});
|
|
|
|
return NextResponse.json(
|
|
{
|
|
success: false,
|
|
error: error instanceof Error ? error.message : 'Failed to fetch parks'
|
|
},
|
|
{
|
|
status: 500,
|
|
headers: {
|
|
'Cache-Control': 'no-store, must-revalidate',
|
|
'Content-Type': 'application/json'
|
|
}
|
|
}
|
|
);
|
|
}
|
|
} |