95 lines
2.7 KiB
JavaScript
95 lines
2.7 KiB
JavaScript
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 places = require("./routes/place");
|
|
const update = require("./routes/update");
|
|
|
|
const app = express();
|
|
|
|
// Swagger API doc set up
|
|
const swaggerJsdoc = require('swagger-jsdoc');
|
|
const swaggerUi = require('swagger-ui-express');
|
|
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: "https://travopti.de/api/v1"
|
|
}
|
|
]
|
|
},
|
|
apis: [
|
|
"./Routes/*.js",
|
|
"./Models/handleClimateUpdate.js",
|
|
"./Models/handleClimateUpdateV2.js",
|
|
]
|
|
};
|
|
const swaggerDocs = swaggerJsdoc(swaggerOptions);
|
|
|
|
(async () => {
|
|
try {
|
|
// Connect to MariaDB
|
|
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: false, docExpansion: "list"}));
|
|
|
|
// Express routes
|
|
app.use(search(dbConn));
|
|
app.use(regions(dbConn));
|
|
app.use(countries(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) {
|
|
console.error("Failed to start the webserver");
|
|
console.error(error);
|
|
}
|
|
})();
|