const express = require("express"); const bodyParser = require("body-parser"); const path = require("path"); const morgan = require("morgan"); const dbConnection = require("./util/dbConnection"); const fs = require("fs"); const cors = require("cors"); require('dotenv').config() // credentials const port = process.env.PORT // Router const search = require("./routes/search"); const regions = require("./routes/regions"); const countries = require("./routes/countries"); const climate = require("./routes/climate"); const places = require("./routes/place"); const update = require("./routes/update"); const app = express(); const swaggerJsdoc = require('swagger-jsdoc'); const swaggerUi = require('swagger-ui-express'); // Swagger set up const swaggerOptions = { swaggerDefinition: { openapi: "3.0.0", info: { title: "TravOpti API", version: "1.0.0", description: "Enable intrest controlled region searching with this API\n" + "No API Key required.", license: { name: "Licensing Pending", url: "https://www.youtube.com/watch?v=dQw4w9WgXcQ&feature=youtu.be" }, contact: { name: "travOpti", url: "https://travopti.de/home", email: "feedback@travopti.de" } }, servers: [ { url: "http://localhost:3000/api/v1" }, { url: "https://travopti.de/api/v1" } ] }, apis: [ "./Routes/*.js", "./Models/handleClimateUpdate.js", "./Models/handleClimateUpdateV2.js", ] }; const swaggerDocs = swaggerJsdoc(swaggerOptions); (async () => { try { const dbConn = await dbConnection(); // Express middleware app.use(morgan("dev")); app.use(express.static(path.join(__dirname, "../../dist"))); app.use(bodyParser.json()); app.use(cors()); app.use('/api/v1/doc', swaggerUi.serve, swaggerUi.setup(swaggerDocs, {explorer: true})); // Express routes app.use(search(dbConn)); app.use(regions(dbConn)); app.use(countries(dbConn)); app.use(climate(dbConn)); app.use(places(dbConn)); app.use(update(dbConn)) app.use((err, req, res, next) => { // 500 if (true) { next(); } else { res.status(500).send(); } }); // Start webserver app.listen(port, () => { console.log(`Travopti backend listening at http://localhost:${port}`) }); } catch (error) { // TODO: logging console.error("Failed to start the webserver"); console.error(error); } })();