import calendarService from '../services/calendarService.js'; function getHashedUserId(req) { return req.headers?.userid; } export default { /** * GET /api/calendar/events * Get all events for the authenticated user * Query params: startDate, endDate (optional) */ async getEvents(req, res) { const hashedUserId = getHashedUserId(req); if (!hashedUserId) { return res.status(401).json({ error: 'Unauthorized' }); } try { const { startDate, endDate } = req.query; const events = await calendarService.getEvents(hashedUserId, { startDate, endDate }); res.json(events); } catch (error) { console.error('Calendar getEvents:', error); res.status(500).json({ error: error.message || 'Internal server error' }); } }, /** * GET /api/calendar/events/:id * Get a single event by ID */ async getEvent(req, res) { const hashedUserId = getHashedUserId(req); if (!hashedUserId) { return res.status(401).json({ error: 'Unauthorized' }); } try { const event = await calendarService.getEvent(hashedUserId, req.params.id); res.json(event); } catch (error) { console.error('Calendar getEvent:', error); if (error.message === 'Event not found') { return res.status(404).json({ error: 'Event not found' }); } res.status(500).json({ error: error.message || 'Internal server error' }); } }, /** * POST /api/calendar/events * Create a new event */ async createEvent(req, res) { const hashedUserId = getHashedUserId(req); if (!hashedUserId) { return res.status(401).json({ error: 'Unauthorized' }); } try { const eventData = req.body; if (!eventData.title || !eventData.startDate) { return res.status(400).json({ error: 'Title and startDate are required' }); } const event = await calendarService.createEvent(hashedUserId, eventData); res.status(201).json(event); } catch (error) { console.error('Calendar createEvent:', error); res.status(500).json({ error: error.message || 'Internal server error' }); } }, /** * PUT /api/calendar/events/:id * Update an existing event */ async updateEvent(req, res) { const hashedUserId = getHashedUserId(req); if (!hashedUserId) { return res.status(401).json({ error: 'Unauthorized' }); } try { const eventData = req.body; if (!eventData.title || !eventData.startDate) { return res.status(400).json({ error: 'Title and startDate are required' }); } const event = await calendarService.updateEvent(hashedUserId, req.params.id, eventData); res.json(event); } catch (error) { console.error('Calendar updateEvent:', error); if (error.message === 'Event not found') { return res.status(404).json({ error: 'Event not found' }); } res.status(500).json({ error: error.message || 'Internal server error' }); } }, /** * DELETE /api/calendar/events/:id * Delete an event */ async deleteEvent(req, res) { const hashedUserId = getHashedUserId(req); if (!hashedUserId) { return res.status(401).json({ error: 'Unauthorized' }); } try { await calendarService.deleteEvent(hashedUserId, req.params.id); res.json({ success: true }); } catch (error) { console.error('Calendar deleteEvent:', error); if (error.message === 'Event not found') { return res.status(404).json({ error: 'Event not found' }); } res.status(500).json({ error: error.message || 'Internal server error' }); } }, /** * GET /api/calendar/birthdays * Get friends' birthdays for a given year * Query params: year (required) */ async getFriendsBirthdays(req, res) { const hashedUserId = getHashedUserId(req); if (!hashedUserId) { return res.status(401).json({ error: 'Unauthorized' }); } try { const year = parseInt(req.query.year) || new Date().getFullYear(); const birthdays = await calendarService.getFriendsBirthdays(hashedUserId, year); res.json(birthdays); } catch (error) { console.error('Calendar getFriendsBirthdays:', error); res.status(500).json({ error: error.message || 'Internal server error' }); } }, /** * GET /api/calendar/widget/birthdays * Get upcoming birthdays for widget display */ async getWidgetBirthdays(req, res) { const hashedUserId = getHashedUserId(req); if (!hashedUserId) { return res.status(401).json({ error: 'Unauthorized' }); } try { const limit = parseInt(req.query.limit) || 10; const birthdays = await calendarService.getUpcomingBirthdays(hashedUserId, limit); res.json(birthdays); } catch (error) { console.error('Calendar getWidgetBirthdays:', error); res.status(500).json({ error: error.message || 'Internal server error' }); } }, /** * GET /api/calendar/widget/upcoming * Get upcoming events for widget display */ async getWidgetUpcoming(req, res) { const hashedUserId = getHashedUserId(req); if (!hashedUserId) { return res.status(401).json({ error: 'Unauthorized' }); } try { const limit = parseInt(req.query.limit) || 10; const events = await calendarService.getUpcomingEvents(hashedUserId, limit); res.json(events); } catch (error) { console.error('Calendar getWidgetUpcoming:', error); res.status(500).json({ error: error.message || 'Internal server error' }); } }, /** * GET /api/calendar/widget/mini * Get mini calendar data for widget display */ async getWidgetMiniCalendar(req, res) { const hashedUserId = getHashedUserId(req); if (!hashedUserId) { return res.status(401).json({ error: 'Unauthorized' }); } try { const data = await calendarService.getMiniCalendarData(hashedUserId); res.json(data); } catch (error) { console.error('Calendar getWidgetMiniCalendar:', error); res.status(500).json({ error: error.message || 'Internal server error' }); } } };