import { sql } from '@vercel/postgres'; import { getUserFromRequest } from '../../../../lib/permission-middleware'; import { isValidSlug } from '../../../../lib/slug-utils'; export default async function handler(req, res) { // Set CORS headers res.setHeader('Access-Control-Allow-Origin', '*'); res.setHeader('Access-Control-Allow-Methods', 'GET, OPTIONS'); res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization'); // Handle preflight requests if (req.method === 'OPTIONS') { res.status(200).end(); return; } if (req.method !== 'GET') { return res.status(405).json({ error: 'Method not allowed' }); } try { // Get authenticated user const user = await getUserFromRequest(req); if (!user) { return res.status(401).json({ error: 'Authentication required' }); } const { identifier } = req.query; if (!identifier) { return res.status(400).json({ error: 'Collection identifier is required' }); } // Determine if identifier is a slug or numeric ID const isSlug = isValidSlug(identifier) || isNaN(parseInt(identifier)); // Verify user has access to this collection let collectionResult; if (isSlug) { collectionResult = await sql` SELECT c.*, cp.role as user_role FROM collections c 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} AND ( c.user_id = ${user.userId} OR cp.id IS NOT NULL OR c.is_public = true ) `; } else { const numericId = parseInt(identifier); collectionResult = await sql` SELECT c.*, cp.role as user_role FROM collections c 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} AND ( c.user_id = ${user.userId} OR cp.id IS NOT NULL OR c.is_public = true ) `; } if (collectionResult.length === 0) { return res.status(404).json({ error: 'Collection not found or access denied' }); } const collection = collectionResult[0]; // Get collection activity (this would typically come from an activity log table) // For now, we'll return a simple mock response const activities = [ { id: 1, type: 'card_added', description: 'Added Lightning Bolt to collection', timestamp: new Date().toISOString(), user: user.email } ]; res.status(200).json({ activities }); } catch (error) { console.error('Collection activity API error:', error); res.status(500).json({ error: 'Internal server error' }); } }