204 lines
6.7 KiB
JavaScript
204 lines
6.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' });
|
|
}
|
|
},
|
|
|
|
/**
|
|
* 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' });
|
|
}
|
|
}
|
|
};
|