const express = require('express') const path = require('path'); const app = express() const gtfsRealtime = require("./tools/gtfsData") app.use(express.static('public')) app.use((req, res, next) => { res.header('Access-Control-Allow-Origin', '*'); // or 'http://127.0.0.1:1001' for security res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept'); next(); }); const port = 1001 app.get('/', (req, res) => { res.sendFile(path.join(__dirname, 'public', 'index.html')); }) app.get('/api/', (req, res) => { res.json({ version: "0.0.1", status: "healthy" }) }) app.get('/api/train/', async (req, res) => { res.json(await gtfsRealtime.getTrains()) }) app.get('/api/train/:routeId', async (req, res) => { const routeId = req.params.routeId; res.json(await gtfsRealtime.getTrainsByRoute(routeId)) }) app.get('/api/bus/', async (req, res) => { res.json(await gtfsRealtime.getBuses()) }) app.get('/api/bus/:routeId', async (req, res) => { const routeId = req.params.routeId; res.json(await gtfsRealtime.getBusesByRoute(routeId)) }) app.get('/api/alert', async (req, res) => { res.json(await gtfsRealtime.getAlerts()) }) app.get('/api/alert/:routeId', async (req, res) => { const routeId = req.params.routeId; res.json(await gtfsRealtime.getAlertsByRoute(routeId)) }) app.get('/api/schedule', async (req, res) => { const { route, station } = req.query; try { let result; if (route) { result = await gtfsRealtime.getScheduleByRoute(route); } else if (station) { result = await gtfsRealtime.getScheduleByStationId(station); } else { return res.status(400).json({ error: "Please provide route, or station query parameter" }); } if (!result || (Array.isArray(result) && result.length === 0)) { return res.status(404).json({ error: "No schedule found" }); } res.json(result); } catch (err) { console.error(err); res.status(500).json({ error: "Internal server error" }); } }); app.get('/api/routes', async (req, res) => { res.json(await gtfsRealtime.getRoutes()) }) app.get('/api/shape/:routeId', async (req, res) => { const routeId = req.params.routeId; res.json(await gtfsRealtime.getShapeByRoute(routeId)) }) app.get('/api/stop', async (req, res) => { res.json(await gtfsRealtime.getStops()) }) app.get('/api/stop/:routeId', async (req, res) => { const routeId = req.params.routeId; res.json(await gtfsRealtime.getStopsByRoute(routeId)) }) app.listen(port, () => { console.log(`Example app listening on port ${port}`) })