75 lines
2.1 KiB
TypeScript
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;
|