changemaker.lite/api/src/modules/calendar/admin-calendar.routes.ts

75 lines
2.1 KiB
TypeScript

import { Router } from 'express';
import { authenticate } from '../../middleware/auth.middleware';
import { requireRole } from '../../middleware/rbac.middleware';
import { validate } from '../../middleware/validate';
import { adminCalendarService } from './admin-calendar.service';
import { createAdminViewSchema, updateAdminViewSchema } from './admin-calendar.schemas';
import { dateRangeQuerySchema } from './shared-calendar.schemas';
const router = Router();
router.use(authenticate);
router.use(requireRole('SUPER_ADMIN', 'MAP_ADMIN'));
// List admin calendar views
router.get('/', async (req, res, next) => {
try {
const views = await adminCalendarService.listAdminViews(req.user!.id);
res.json({ views });
} catch (error) {
next(error);
}
});
// Create admin calendar view
router.post('/', validate(createAdminViewSchema), async (req, res, next) => {
try {
const view = await adminCalendarService.createAdminView(req.user!.id, req.body);
res.status(201).json({ view });
} catch (error) {
next(error);
}
});
// Update admin calendar view
router.patch('/:id', validate(updateAdminViewSchema), async (req, res, next) => {
try {
const view = await adminCalendarService.updateAdminView(
req.user!.id,
req.params.id as string,
req.body,
);
res.json({ view });
} catch (error) {
next(error);
}
});
// Delete admin calendar view
router.delete('/:id', async (req, res, next) => {
try {
await adminCalendarService.deleteAdminView(req.user!.id, req.params.id as string);
res.json({ success: true });
} catch (error) {
next(error);
}
});
// Get merged items for admin calendar view
router.get('/:id/items', validate(dateRangeQuerySchema, 'query'), async (req, res, next) => {
try {
const { startDate, endDate } = req.query as { startDate: string; endDate: string };
const result = await adminCalendarService.getAdminViewItems(
req.params.id as string,
req.user!.id,
startDate,
endDate,
);
res.json(result);
} catch (error) {
next(error);
}
});
export const adminCalendarRouter = router;