pg-rest-api/src/main.js

281 lines
12 KiB
JavaScript

const debug=require('debug')('debug');
debug('main start...');
require('dotenv').config();
const HELMET = require('helmet');
const COMPRESSION = require('compression');
const express = require("express");
const CORS = require("cors");
//get API root with alive msg
const ROOTROUTER = require('./route/root');
//get overall number of tables in public schema as array[0]['count'] object
const tableCount = require('./route/table-count');
//get overall number of entries per table in public schema as array[0]['count'] object
const tableAgencyCount = require('./route/table-agency-count');
const tableAreasCount = require('./route/table-areas-count');
const tableAttributionsCount = require('./route/table-attributions-count');
const tableCalendarCount = require('./route/table-calendar-count');
const tableCalendarDatesCount = require('./route/table-calendar-dates-count');
const tableFareAttributesCount = require('./route/table-fare-attributes-count');
const tableFareLegRulesCount = require('./route/table-fare-leg-rules-count');
const tableFareMediaCount = require('./route/table-fare-media-count');
const tableFareProductsCount = require('./route/table-fare-products-count');
const tableFareRulesCount = require('./route/table-fare-rules-count');
const tableFareTransferRulesCount = require('./route/table-fare-transfer-rules-count');
const tableFeedInfoCount = require('./route/table-feed-info-count');
const tableFrequenciesCount = require('./route/table-frequencies-count');
const tableLevelsCount = require('./route/table-levels-count');
const tablePathwaysCount = require('./route/table-pathways-count');
const tableRoutesCount = require('./route/table-routes-count');
const tableShapesCount = require('./route/table-shapes-count');
const tableStopAreasCount = require('./route/table-stop-areas-count');
const tableStopsCount = require('./route/table-stops-count');
const tableStopTimesCount = require('./route/table-stop-times-count');
const tableTransfersCount = require('./route/table-transfers-count');
const tableTranslationsCount = require('./route/table-translations-count');
const tableTripsCount = require('./route/table-trips-count');
//get all table names in public schema as array[i]['table_name'] object
const tableNames = require('./route/table-names');
//get all agency_id values
const agencyIds = require('./route/agencyids');
//get agencies using pagination
const AGENCYROUTER = require('./route/agency');
//get agency_name from route_id
const AGENCYNAMEROUTER = require('./route/agency-name');
//get agency_url from route_id
const AGENCYURLROUTER = require('./route/agency-url');
//get all entries from table
const AGENCYALLROUTER = require('./route/agency-all');
const FREQUENCIESALLROUTER = require('./route/frequencies-all');
const ROUTESALLROUTER = require('./route/routes-all');
const STOPSALLROUTER = require('./route/stops-all');
//get table entries using offset and limit
const agencyOsetLimit = require('./route/agency-oset-limit');
const agencyIdName = require('./route/agency-id-name');
const calendarOsetLimit = require('./route/calendar-oset-limit');
const calendarDatesOsetLimit = require('./route/calendar-dates-oset-limit');
const frequenciesOsetLimit = require('./route/frequencies-oset-limit');
const levelsOsetLimit = require('./route/levels-oset-limit');
const pathwaysOsetLimit = require('./route/pathways-oset-limit');
const routesOsetLimit = require('./route/routes-oset-limit');
const shapesOsetLimit = require('./route/shapes-oset-limit');
const stopsOsetLimit = require('./route/stops-oset-limit');
const stopTimesOsetLimit = require('./route/stop-times-oset-limit');
const transfersOsetLimit = require('./route/transfers-oset-limit');
const tripsOsetLimit = require('./route/trips-oset-limit');
//get route_short_name from trip_short_name
const ROUTESHORTNAME = require('./route/route-short-name');
//get service by service_id
const ROUTESERVICE = require('./route/service');
//get all service days that belong to a certain route_short_name
/** TODO Disable this route as it is not working!
const ROUTESERVICEDAYS = require('./route/servicedays');
*/
//get all service with counts of routes
const ROUTESERVICEOVERVIEW = require('./route/service-overview');
//get number of routes belonging to the same agency_id
const ROUTECOUNT = require('./route/route-count');
// get overall number of ...
const numberOfRoutes = require('./route/number-of-routes');
const numberOfTrips = require('./route/number-of-trips');
//get routes belonging to the same agency_id
const routesByAgencyId = require('./route/routes-by-agency-id');
//get all service dates by service_id (including additions and exceptions)
const serviceAvailability=require('./route/service-availability');
//get service availability for all trips belonging to the specified route_id
const serviceAbilityByRouteId=require('./route/service-ability-by-route-id');
//get array of dates when service is available by service_id
const datesServiceAvailable=require('./route/dates-service-available');
//get array of dates when service is added by service_id
const datesServiceAdded=require('./route/dates-service-added');
//get array of dates when service is removed by service_id
const datesServiceRemoved=require('./route/dates-service-removed');
//get trip_headsign from trip_short_name
const TRIPHEADSIGNROUTER = require('./route/trip-headsign');
/*SELECT trip_id,trip_short_name,trip_headsign,routes.route_id,routes.route_short_name,routes.route_type,agency.agency_id,agency.agency_name,agency.agency_url FROM agency,routes,trips WHERE trip_short_name ='1944027' AND trips.route_id = routes.route_id AND routes.agency_id = agency.agency_id;*/
//get pt info by trip_short_name from IVU radio interface location message
const ptByIfleet = require('./route/pt-by-ifleet');
//get all trips that belong to a certain route_short_name
const TRIPSROUTER = require('./route/trips');
//get all trips that belong to the specified route_id
const tripsByRouteId = require('./route/trips-by-route-id');
//get trips by route_id and day YYY-M(M)-D(D)
const tripsByRouteDay = require('./route/trips-by-route-day');
//get trip updates by route_id and day YYY-M(M)-D(D)
const tripUpdatesByRouteDay = require('./route/trip-updates-by-route-day');
//get overall trip counts for calendar dates that belong to the specified route_id
const tripCalendarByRouteId = require('./route/trip-calendar-by-route-id');
//get overall trip counts for calendar dates that belong to the specified agency_id
const tripCalendarByAgencyId = require('./route/trip-calendar-by-agency-id');
//get overall trip count that belong to a calendar date
const tripCountDayAgency = require('./route/trip-count-day-agency');
const tripCountDayRoute = require('./route/trip-count-day-route');
//get all services that belong to the specified route_id
const servicesByRouteId = require('./route/services-by-route-id');
//get number of trips belonging to the same agency_id
const TRIPCOUNT = require('./route/trip-count');
//TODO make this list available via config
//limit access to this origin list
let whitelist = [
'http://localhost:8080',
'http(s)://foo.bar'
];
const app = express();
//compress all routes
app.use(COMPRESSION());
//protect against vulnerabilities
app.use(HELMET());
//configure CORS
app.use(CORS({
origin: function(origin, callback){
// allow requests with no origin
debug('origin: '+origin)
if(!origin){
return callback(null, true);
}
if(whitelist.indexOf(origin) === -1){
let message = 'The CORS policy for this origin does not allow access from the particular origin: '+origin;
return callback(new Error(message), false);
}
debug('origin: '+origin+' allowed by CORS');
return callback(null, true);
}
}));
//api enable/disable?
app.use('/', ROOTROUTER);
//agency
app.use('/agency', AGENCYROUTER);
app.use('/agency-name', AGENCYNAMEROUTER);
app.use('/agency-url', AGENCYURLROUTER);
app.use('/agencyids',agencyIds);
//get all entries from table
app.use('/agency-all', AGENCYALLROUTER);
app.use('/frequencies-all', FREQUENCIESALLROUTER);
app.use('/routes-all', ROUTESALLROUTER);
app.use('/stops-all', STOPSALLROUTER);
//offset and limit
app.use('/agency-oset-limit',agencyOsetLimit);
app.use('/agency-id-name-oset-limit',agencyIdName);
app.use('/calendar-oset-limit',calendarOsetLimit);
app.use('/calendar_dates-oset-limit',calendarDatesOsetLimit);
app.use('/frequencies-oset-limit',frequenciesOsetLimit);
app.use('/levels-oset-limit',levelsOsetLimit);
app.use('/pathways-oset-limit',pathwaysOsetLimit);
app.use('/routes-oset-limit',routesOsetLimit);
app.use('/shapes-oset-limit',shapesOsetLimit);
app.use('/stops-oset-limit',stopsOsetLimit);
app.use('/stop_times-oset-limit',stopTimesOsetLimit);
app.use('/transfers-oset-limit',transfersOsetLimit);
app.use('/trips-oset-limit',tripsOsetLimit);
//get routes by agency_id
app.use('/routes',routesByAgencyId);
//count
//get route count by providing agency_id
app.use('/route-count', ROUTECOUNT);
app.use('/trip-count', TRIPCOUNT);
app.use('/number-of-routes', numberOfRoutes);
app.use('/number-of-trips', numberOfTrips);
//get route_short-name by providing trip_short_name
app.use('/route-short-name', ROUTESHORTNAME);
app.use('/pt-by-ifleet', ptByIfleet);
//trips
app.use('/trip-headsign', TRIPHEADSIGNROUTER);
app.use('/trips', TRIPSROUTER);
app.use('/trips-by-route-id', tripsByRouteId);
app.use('/trip-count-day-agency', tripCountDayAgency);
app.use('/trip-count-day-route', tripCountDayRoute);
app.use('/trip-calendar-by-agency-id', tripCalendarByAgencyId);
app.use('/trip-calendar-by-route-id', tripCalendarByRouteId);
app.use('/trips-by-route-day', tripsByRouteDay);
//trip updates
app.use('/trip-updates-by-route-day', tripUpdatesByRouteDay);
//service
app.use('/service', ROUTESERVICE);
/** TODO Disable this route as it is not working!
app.use('/servicedays', ROUTESERVICEDAYS);
*/
app.use('/service-overview', ROUTESERVICEOVERVIEW);
app.use('/dates-service-available',datesServiceAvailable);
app.use('/dates-service-added',datesServiceAdded);
app.use('/dates-service-removed',datesServiceRemoved);
app.use('/service-availability',serviceAvailability);
app.use('/service-ability-by-route-id',serviceAbilityByRouteId);
app.use('/services-by-route-id', servicesByRouteId);
//entry count
app.use('/table-areas-count', tableAreasCount);
app.use('/table-agency-count', tableAgencyCount);
app.use('/table-attributions-count', tableAttributionsCount);
app.use('/table-calendar-count', tableCalendarCount);
app.use('/table-calendar_dates-count', tableCalendarDatesCount);
app.use('/table-fare_attributes-count', tableFareAttributesCount);
app.use('/table-fare_leg-rules-count', tableFareLegRulesCount);
app.use('/table-fare_media-count', tableFareMediaCount);
app.use('/table-fare_products-count', tableFareProductsCount);
app.use('/table-fare_rules-count', tableFareRulesCount);
app.use('/table-fare_transfer-rules-count', tableFareTransferRulesCount);
app.use('/table-feed_info-count', tableFeedInfoCount);
app.use('/table-frequencies-count', tableFrequenciesCount);
app.use('/table-levels-count', tableLevelsCount);
app.use('/table-pathways-count', tablePathwaysCount);
app.use('/table-routes-count', tableRoutesCount);
app.use('/table-shapes-count', tableShapesCount);
app.use('/table-stop_areas-count', tableStopAreasCount);
app.use('/table-stops-count', tableStopsCount);
app.use('/table-stop_times-count', tableStopTimesCount);
app.use('/table-transfers-count', tableTransfersCount);
app.use('/table-translations-count', tableTranslationsCount);
app.use('/table-trips-count', tableTripsCount);
//number of tables
app.use('/table-count', tableCount);
//array with name of all tables
app.use('/table-names', tableNames);
module.exports=app;
debug('main done..');