Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Ls1vMdg2GYqbnKZmPaX1ot
29 lines
2.5 KiB
JavaScript
29 lines
2.5 KiB
JavaScript
// Campuses (v1). The logic is in services/campuses.ts, shared with /api/v2 (1.51.9).
|
|
const campuses = require('../services/campuses');
|
|
const { getClientIp } = require('../utils/requestUtils');
|
|
const { scopeFor } = require('../utils/campusScope');
|
|
|
|
const ctxOf = async (req) => ({ scope: await scopeFor(req), ip: getClientIp(req) });
|
|
const fail = (res, error) => res.status(error.statusCode || 400).json({ message: error.message, ...(error.code && !/^P\d/.test(error.code) ? { code: error.code } : {}) });
|
|
|
|
// @route GET /api/campuses — whether they're on, and the active ones
|
|
const getCampuses = async (req, res) => { try { res.json(await campuses.publicCampuses()); } catch (e) { fail(res, e); } };
|
|
// @route GET /api/campuses/by-slug/:slug
|
|
const getCampusBySlug = async (req, res) => { try { res.json(await campuses.campusBySlug(req.params.slug)); } catch (e) { fail(res, e); } };
|
|
// @route GET /api/campuses/admin
|
|
const getCampusesAdmin = async (req, res) => { try { res.json(await campuses.adminCampuses()); } catch (e) { fail(res, e); } };
|
|
// @route PUT /api/campuses/settings { enabled }
|
|
const updateCampusSettings = async (req, res) => { try { res.json(await campuses.setCampusesEnabled(req.body?.enabled === true, req.user, await ctxOf(req))); } catch (e) { fail(res, e); } };
|
|
// @route POST /api/campuses
|
|
const createCampus = async (req, res) => { try { res.status(201).json(await campuses.createCampus(req.body || {}, req.user, await ctxOf(req))); } catch (e) { fail(res, e); } };
|
|
// @route PUT /api/campuses/:id
|
|
const updateCampus = async (req, res) => { try { res.json(await campuses.updateCampus(req.params.id, req.body || {}, req.user, await ctxOf(req))); } catch (e) { fail(res, e); } };
|
|
// @route PUT /api/campuses/order { ids }
|
|
const reorderCampuses = async (req, res) => { try { await campuses.reorderCampuses(req.body?.ids); res.json({ ok: true }); } catch (e) { fail(res, e); } };
|
|
// @route DELETE /api/campuses/:id
|
|
const deleteCampus = async (req, res) => { try { await campuses.deleteCampus(req.params.id, req.user, await ctxOf(req)); res.json({ message: 'Campus deleted' }); } catch (e) { fail(res, e); } };
|
|
// @route GET /api/campuses/:id/audience?registrants=true
|
|
const getCampusAudience = async (req, res) => { try { res.json(await campuses.campusAudience(req.params.id, req.query.registrants === 'true', await ctxOf(req))); } catch (e) { fail(res, e); } };
|
|
|
|
module.exports = { getCampusAudience, getCampuses, getCampusBySlug, getCampusesAdmin, updateCampusSettings, createCampus, updateCampus, reorderCampuses, deleteCampus };
|