diff --git a/components/CollaboratorFacepile.js b/components/CollaboratorFacepile.js index 5439c61..a89fb75 100644 --- a/components/CollaboratorFacepile.js +++ b/components/CollaboratorFacepile.js @@ -21,9 +21,13 @@ export default function CollaboratorFacepile({ collectionId, creatorEmail }) { if (response.ok) { const data = await response.json(); setCollaborators(data.permissions || []); + } else { + console.error('Failed to fetch collaborators:', response.status); + setCollaborators([]); // Fallback to empty array } } catch (error) { console.error('Error fetching collaborators:', error); + setCollaborators([]); // Fallback to empty array } finally { setLoading(false); } diff --git a/pages/api/favorites.js b/pages/api/favorites.js index c941fa8..5f9eec2 100644 --- a/pages/api/favorites.js +++ b/pages/api/favorites.js @@ -33,21 +33,38 @@ export default async function handler(req, res) { // Get user's favorites const { type } = req.query; // Optional filter by type - const result = await sql` - SELECT uf.*, - CASE - WHEN uf.item_type = 'collection' THEN c.name - WHEN uf.item_type = 'card' THEN cards.name - WHEN uf.item_type = 'deck' THEN d.name - END as item_name - FROM user_favorites uf - LEFT JOIN collections c ON uf.item_type = 'collection' AND uf.item_id = c.id - LEFT JOIN cards ON uf.item_type = 'card' AND uf.item_id = cards.id - LEFT JOIN decks d ON uf.item_type = 'deck' AND uf.item_id = d.id - WHERE uf.user_id = ${user.userId} - ${type ? sql`AND uf.item_type = ${type}` : sql``} - ORDER BY uf.created_at DESC - `; + let result; + if (type) { + result = await sql` + SELECT uf.*, + CASE + WHEN uf.item_type = 'collection' THEN c.name + WHEN uf.item_type = 'card' THEN cards.name + WHEN uf.item_type = 'deck' THEN d.name + END as item_name + FROM user_favorites uf + LEFT JOIN collections c ON uf.item_type = 'collection' AND uf.item_id = c.id + LEFT JOIN cards ON uf.item_type = 'card' AND uf.item_id = cards.id + LEFT JOIN decks d ON uf.item_type = 'deck' AND uf.item_id = d.id + WHERE uf.user_id = ${user.userId} AND uf.item_type = ${type} + ORDER BY uf.created_at DESC + `; + } else { + result = await sql` + SELECT uf.*, + CASE + WHEN uf.item_type = 'collection' THEN c.name + WHEN uf.item_type = 'card' THEN cards.name + WHEN uf.item_type = 'deck' THEN d.name + END as item_name + FROM user_favorites uf + LEFT JOIN collections c ON uf.item_type = 'collection' AND uf.item_id = c.id + LEFT JOIN cards ON uf.item_type = 'card' AND uf.item_id = cards.id + LEFT JOIN decks d ON uf.item_type = 'deck' AND uf.item_id = d.id + WHERE uf.user_id = ${user.userId} + ORDER BY uf.created_at DESC + `; + } res.status(200).json({ favorites: result.rows diff --git a/pages/collection/[id].js b/pages/collection/[id].js index fa8f695..082d164 100644 --- a/pages/collection/[id].js +++ b/pages/collection/[id].js @@ -77,9 +77,13 @@ export default function CollectionView() { const data = await response.json(); const isFav = data.favorites.some(fav => fav.item_id === parseInt(id)); setIsFavorited(isFav); + } else { + console.error('Failed to check favorites:', response.status); + // Keep default false state } } catch (error) { console.error('Error checking favorites:', error); + // Keep default false state } }; @@ -146,6 +150,8 @@ export default function CollectionView() { if (response.ok) { setIsFavorited(false); + } else { + console.error('Failed to remove favorite:', response.status); } } else { // Add to favorites @@ -163,6 +169,8 @@ export default function CollectionView() { if (response.ok) { setIsFavorited(true); + } else { + console.error('Failed to add favorite:', response.status); } } } catch (error) {