- Implemented Telegram cancellation parsing logic in `telegramCancellationParser.js`. - Created unit tests for cancellation parsing in `telegramCancellationParser.test.js`. - Developed integration tests for Telegram import service in `telegramImport.integration.test.js`. - Added API tests for Telegram import endpoints in `telegramImportApi.test.js`. - Introduced service tests for Telegram import logic in `telegramImportService.test.js`. - Documented the Telegram cancellation import process in `telegram-cancellation-import.md`. - Built a React component for managing Telegram imports in `TelegramImportPanel.jsx`.
102 lines
5.9 KiB
JavaScript
102 lines
5.9 KiB
JavaScript
const express = require('express');
|
|
const router = express.Router();
|
|
|
|
// Controllers
|
|
const routesController = require('../controllers/routesController');
|
|
const stopsController = require('../controllers/stopsController');
|
|
const routeStopsController = require('../controllers/routeStopsController');
|
|
const schedulesController = require('../controllers/schedulesController');
|
|
const holidaysController = require('../controllers/holidaysController');
|
|
const etaController = require('../controllers/etaController');
|
|
const syncController = require('../controllers/syncController');
|
|
const telemetryController = require('../controllers/telemetryController');
|
|
const passengerTelemetryController = require('../controllers/passengerTelemetryController');
|
|
const { createPassengerTelemetryRateLimiter } = require('../middleware/passengerTelemetryRateLimiter');
|
|
const { authenticatePassengerTelemetry } = require('../middleware/passengerTelemetryAuth');
|
|
const { authenticateToken, requireAdmin } = require('../middleware/auth');
|
|
const { resolveCity } = require('../middleware/city');
|
|
const qualityController = require('../controllers/qualityController');
|
|
const scheduleCenterController = require('../controllers/scheduleCenterController');
|
|
|
|
// City catalogue is global. Every transport-data endpoint below receives a
|
|
// verified city context from X-City-Id (or falls back to the legacy Polotsk city).
|
|
router.use('/cities', require('./cities'));
|
|
router.use(resolveCity);
|
|
|
|
router.use('/schedule-import', require('./scheduleImport'));
|
|
router.use('/telegram-import', require('./telegramImport'));
|
|
router.get('/quality', authenticateToken, requireAdmin, qualityController.getReport.bind(qualityController));
|
|
router.get('/schedule-center', authenticateToken, requireAdmin, scheduleCenterController.getOverview.bind(scheduleCenterController));
|
|
|
|
// Routes
|
|
router.get('/routes', routesController.getAllRoutes.bind(routesController));
|
|
router.get('/routes/:id', routesController.getRouteById.bind(routesController));
|
|
router.post('/routes', routesController.createRoute.bind(routesController));
|
|
router.put('/routes/:id', routesController.updateRoute.bind(routesController));
|
|
router.delete('/routes/:id', routesController.deleteRoute.bind(routesController));
|
|
|
|
// Route Stops (привязка остановок к маршрутам)
|
|
router.get('/routes/:routeId/stops', routeStopsController.getRouteStops.bind(routeStopsController));
|
|
router.get('/routes/:routeId/available-stops', routeStopsController.getAvailableStops.bind(routeStopsController));
|
|
router.post('/routes/:routeId/stops', routeStopsController.addStopToRoute.bind(routeStopsController));
|
|
router.put('/routes/:routeId/stops/:routeStopId', routeStopsController.updateRouteStop.bind(routeStopsController));
|
|
router.delete('/routes/:routeId/stops/:routeStopId', routeStopsController.removeStopFromRoute.bind(routeStopsController));
|
|
router.put('/routes/:routeId/stops-reorder', routeStopsController.reorderRouteStops.bind(routeStopsController));
|
|
|
|
// Route Schedules (расписания маршрутов)
|
|
router.get('/routes/:routeId/schedules', schedulesController.getRouteSchedules.bind(schedulesController));
|
|
router.get('/routes/:routeId/schedule/today', schedulesController.getTodaySchedule.bind(schedulesController));
|
|
router.post('/routes/:routeId/schedules/copy', schedulesController.copySchedule.bind(schedulesController));
|
|
|
|
// Schedules (общие)
|
|
router.get('/schedules/:id', schedulesController.getScheduleById.bind(schedulesController));
|
|
router.post('/schedules', schedulesController.createSchedule.bind(schedulesController));
|
|
router.put('/schedules/:id', schedulesController.updateSchedule.bind(schedulesController));
|
|
router.delete('/schedules/:id', schedulesController.deleteSchedule.bind(schedulesController));
|
|
|
|
// Holidays (праздничные дни)
|
|
router.get('/holidays', holidaysController.getAllHolidays.bind(holidaysController));
|
|
router.get('/holidays/upcoming', holidaysController.getUpcomingHolidays.bind(holidaysController));
|
|
router.get('/holidays/year/:year', holidaysController.getHolidaysForYear.bind(holidaysController));
|
|
router.get('/holidays/check/:date', holidaysController.checkHoliday.bind(holidaysController));
|
|
router.post('/holidays', holidaysController.createHoliday.bind(holidaysController));
|
|
router.put('/holidays/:id', holidaysController.updateHoliday.bind(holidaysController));
|
|
router.delete('/holidays/:id', holidaysController.deleteHoliday.bind(holidaysController));
|
|
|
|
// Stops
|
|
router.get('/stops', stopsController.getAllStops.bind(stopsController));
|
|
router.get('/stops/nearby', stopsController.getNearbyStops.bind(stopsController));
|
|
router.get('/stops/:id', stopsController.getStopById.bind(stopsController));
|
|
router.post('/stops', stopsController.createStop.bind(stopsController));
|
|
router.put('/stops/:id', stopsController.updateStop.bind(stopsController));
|
|
router.delete('/stops/:id', stopsController.deleteStop.bind(stopsController));
|
|
|
|
// ETA
|
|
router.post('/eta/calculate', etaController.calculateEta.bind(etaController));
|
|
router.get('/eta/stop/:stopId', etaController.getStopEtas.bind(etaController));
|
|
|
|
// Realtime GPS / Telemetry
|
|
router.post('/telemetry/ingest', telemetryController.ingest.bind(telemetryController));
|
|
router.post(
|
|
'/passenger-telemetry/ingest',
|
|
createPassengerTelemetryRateLimiter(),
|
|
authenticatePassengerTelemetry,
|
|
passengerTelemetryController.ingest.bind(passengerTelemetryController)
|
|
);
|
|
router.get('/realtime/routes/:routeId/vehicles', telemetryController.getRouteLiveVehicles.bind(telemetryController));
|
|
router.get('/realtime/vehicles/:vehicleId', telemetryController.getVehicleLiveState.bind(telemetryController));
|
|
|
|
// Sync
|
|
router.get('/sync', syncController.sync.bind(syncController));
|
|
router.get('/sync/status', syncController.getSyncStatus.bind(syncController));
|
|
|
|
// Alerts
|
|
const alertsRouter = require('./alerts');
|
|
router.use('/alerts', alertsRouter);
|
|
|
|
// Users management (requires JWT auth, handled in routes/users.js)
|
|
const usersRouter = require('./users');
|
|
router.use('/users', usersRouter);
|
|
|
|
module.exports = router;
|