bunker-admin a77306fac2 Initial v2 commit: complete rebuild with unified API + React admin
Phase 1-14 complete:
- Unified Express.js API (TypeScript, Prisma ORM, PostgreSQL 16)
- React Admin GUI (Vite + Ant Design + Zustand)
- JWT auth with refresh tokens
- Influence: Campaigns, Representatives, Responses, Email Queue
- Map: Locations, Cuts, Shifts, Canvassing System
- NAR data import infrastructure (2025 format)
- Listmonk newsletter integration
- Landing page builder (GrapesJS)
- MkDocs + Code Server integration
- Volunteer portal with GPS tracking
- Monitoring stack (Prometheus, Grafana, Alertmanager)
- Pangolin tunnel integration

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-11 10:05:04 -07:00

37 lines
1.3 KiB
JavaScript

const express = require('express');
const router = express.Router();
const cutsController = require('../controllers/cutsController');
const { requireAuth, requireAdmin } = require('../middleware/auth');
const config = require('../config');
// Add middleware to check if cuts table is configured
const checkCutsTable = (req, res, next) => {
if (!config.nocodb.cutsSheetId) {
console.warn('Cuts table not configured - NOCODB_CUTS_SHEET not set');
// Continue anyway, controller will handle it
}
next();
};
// Apply the check to all routes
router.use(checkCutsTable);
// Get all cuts (filtered by permissions)
router.get('/', cutsController.getAll);
// Get single cut by ID
router.get('/:id', cutsController.getById);
// Admin only routes
router.post('/', requireAdmin, cutsController.create);
router.put('/:id', requireAdmin, cutsController.update);
router.delete('/:id', requireAdmin, cutsController.delete);
// New cut enhancement routes - admin only
router.get('/:id/locations', requireAdmin, cutsController.getLocationsInCut);
router.get('/:id/locations/export', requireAdmin, cutsController.exportCutLocations);
router.get('/:id/statistics', requireAdmin, cutsController.getCutStatistics);
router.put('/:id/settings', requireAdmin, cutsController.updateCutSettings);
module.exports = router;