145 lines
4.7 KiB
JavaScript
145 lines
4.7 KiB
JavaScript
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' });
|
|
}
|
|
}
|
|
};
|