🔧 Fix Thumbnails API SQL Result Structure

🐛 Root Cause Found:
- SQL queries return { rows: [...] } structure, not direct arrays
- Code was accessing collectionResult.length instead of collectionResult.rows.length
- This caused undefined results leading to collection.id errors

 Fixes Applied:
- Updated to use collectionResult.rows.length for length checks
- Updated to use collectionResult.rows[0] for collection data
- Added proper SQL error handling with try/catch
- Enhanced validation for SQL result structure

🔧 Technical Improvements:
- Proper error handling for SQL query failures
- Correct access to SQL result structure
- Better validation before accessing collection properties
- Cleaner debug output (removed excessive logging)

This should resolve the 'Cannot read properties of undefined (reading 'id')' error! 🎯
This commit is contained in:
Randall Stillwell 2025-07-27 14:15:29 -05:00
parent 2951efdaa0
commit 39dbaca07d

View file

@ -34,51 +34,46 @@ export default async function handler(req, res) {
// Determine if identifier is a slug or numeric ID // Determine if identifier is a slug or numeric ID
const isSlug = isValidSlug(identifier) || isNaN(parseInt(identifier)); const isSlug = isValidSlug(identifier) || isNaN(parseInt(identifier));
console.log('🔍 Identifier analysis:', { identifier, isSlug, isValidSlug: isValidSlug(identifier), isNaN: isNaN(parseInt(identifier)) });
// Verify user has access to this collection // Verify user has access to this collection
let collectionResult; let collectionResult;
if (isSlug) { try {
console.log('🔍 Querying by slug:', identifier); if (isSlug) {
collectionResult = await sql` collectionResult = await sql`
SELECT c.*, cp.role as user_role SELECT c.*, cp.role as user_role
FROM collections c FROM collections c
LEFT JOIN collection_permissions cp ON c.id = cp.collection_id AND cp.user_id = ${user.userId} AND cp.status = 'active' LEFT JOIN collection_permissions cp ON c.id = cp.collection_id AND cp.user_id = ${user.userId} AND cp.status = 'active'
WHERE c.slug = ${identifier} WHERE c.slug = ${identifier}
AND ( AND (
c.user_id = ${user.userId} OR c.user_id = ${user.userId} OR
cp.id IS NOT NULL OR cp.id IS NOT NULL OR
c.is_public = true c.is_public = true
) )
`; `;
} else { } else {
const numericId = parseInt(identifier); const numericId = parseInt(identifier);
console.log('🔍 Querying by ID:', numericId); collectionResult = await sql`
collectionResult = await sql` SELECT c.*, cp.role as user_role
SELECT c.*, cp.role as user_role FROM collections c
FROM collections c LEFT JOIN collection_permissions cp ON c.id = cp.collection_id AND cp.user_id = ${user.userId} AND cp.status = 'active'
LEFT JOIN collection_permissions cp ON c.id = cp.collection_id AND cp.user_id = ${user.userId} AND cp.status = 'active' WHERE c.id = ${numericId}
WHERE c.id = ${numericId} AND (
AND ( c.user_id = ${user.userId} OR
c.user_id = ${user.userId} OR cp.id IS NOT NULL OR
cp.id IS NOT NULL OR c.is_public = true
c.is_public = true )
) `;
`; }
} catch (sqlError) {
console.error('🔍 SQL Error:', sqlError);
return res.status(500).json({ error: 'Database query failed' });
} }
if (collectionResult.length === 0) { if (!collectionResult || !collectionResult.rows || collectionResult.rows.length === 0) {
return res.status(404).json({ error: 'Collection not found or access denied' }); return res.status(404).json({ error: 'Collection not found or access denied' });
} }
console.log('🔍 Collection result:', { const collection = collectionResult.rows[0];
identifier,
isSlug,
resultLength: collectionResult.length,
collection: collectionResult[0]
});
const collection = collectionResult[0];
// Add debugging and validation // Add debugging and validation
if (!collection || !collection.id) { if (!collection || !collection.id) {