const express = require('express'); const router = express.Router(); const pool = require('../db'); const { authMiddleware } = require('./auth'); // Get all events for user router.get('/', authMiddleware, async (req, res) => { try { const result = await pool.query( 'SELECT * FROM events WHERE user_id = $1 ORDER BY date ASC', [req.userId] ); res.json(result.rows); } catch (err) { console.error(err); res.status(500).json({ error: 'Server error' }); } }); // Get single event router.get('/:id', authMiddleware, async (req, res) => { try { const result = await pool.query( 'SELECT * FROM events WHERE id = $1 AND user_id = $2', [req.params.id, req.userId] ); if (result.rows.length === 0) return res.status(404).json({ error: 'Event not found' }); res.json(result.rows[0]); } catch (err) { console.error(err); res.status(500).json({ error: 'Server error' }); } }); // Create event router.post('/', authMiddleware, async (req, res) => { const { name, date, location, event_type, budget, notes } = req.body; if (!name || !date) return res.status(400).json({ error: 'Name and date are required' }); try { const result = await pool.query( `INSERT INTO events (user_id, name, date, location, event_type, budget, notes) VALUES ($1, $2, $3, $4, $5, $6, $7) RETURNING *`, [req.userId, name, date, location, event_type || 'general', budget || 0, notes] ); res.status(201).json(result.rows[0]); } catch (err) { console.error(err); res.status(500).json({ error: 'Server error' }); } }); // Update event router.put('/:id', authMiddleware, async (req, res) => { const { name, date, location, event_type, budget, status, notes } = req.body; try { const result = await pool.query( `UPDATE events SET name=$1, date=$2, location=$3, event_type=$4, budget=$5, status=$6, notes=$7 WHERE id=$8 AND user_id=$9 RETURNING *`, [name, date, location, event_type, budget, status, notes, req.params.id, req.userId] ); if (result.rows.length === 0) return res.status(404).json({ error: 'Event not found' }); res.json(result.rows[0]); } catch (err) { console.error(err); res.status(500).json({ error: 'Server error' }); } }); // Delete event router.delete('/:id', authMiddleware, async (req, res) => { try { const result = await pool.query( 'DELETE FROM events WHERE id=$1 AND user_id=$2 RETURNING id', [req.params.id, req.userId] ); if (result.rows.length === 0) return res.status(404).json({ error: 'Event not found' }); res.json({ message: 'Event deleted' }); } catch (err) { console.error(err); res.status(500).json({ error: 'Server error' }); } }); // Get event stats router.get('/:id/stats', authMiddleware, async (req, res) => { try { const [guestsRes, budgetRes, bookingsRes] = await Promise.all([ pool.query('SELECT rsvp_status, COUNT(*) FROM guests WHERE event_id=$1 GROUP BY rsvp_status', [req.params.id]), pool.query('SELECT SUM(estimated_cost) as estimated, SUM(actual_cost) as actual FROM budget_items WHERE event_id=$1', [req.params.id]), pool.query('SELECT SUM(cost) as total_bookings FROM bookings WHERE event_id=$1', [req.params.id]), ]); res.json({ guests: guestsRes.rows, budget: budgetRes.rows[0], bookings: bookingsRes.rows[0], }); } catch (err) { console.error(err); res.status(500).json({ error: 'Server error' }); } }); module.exports = router;