Files
dashboard/backend/index.js

86 lines
2.8 KiB
JavaScript

const express = require('express')
const app = express();
const status = require('http-status');
const fetch = require('node-fetch');
var mysql = require('mysql');
const path = require('path');
var connection = mysql.createConnection({
host: 'localhost',
user: 'simcompanies',
password: '',
database: 'simcompanies'
});
const mockDataDay = require('./mockdata-test/day.json');
var resourceList;
var serverStartupComplete = false;
function twoDigits(d) {
if (0 <= d && d < 10) return "0" + d.toString();
if (-10 < d && d < 0) return "-0" + (-1 * d).toString();
return d.toString();
}
Date.prototype.toMysqlFormat = function () {
return this.getFullYear() + "-" + twoDigits(1 + this.getMonth()) + "-" + twoDigits(this.getDate()) + " " + twoDigits(this.getHours()) + ":" + twoDigits(this.getMinutes()) + ":" + twoDigits(this.getSeconds());
};
async function loadData() {
var rL = await fetch("https://www.simcompanies.com/api/v3/en/encyclopedia/resources/");
resourceList = await rL.json();
serverStartupComplete = true;
}
loadData();
app.get("*", function (req, res, next) {
if (!serverStartupComplete)
return res.send("Server is starting...");
else return next();
});
app.use(express.static(path.join(__dirname, 'frontend')));
app.use(express.static(`${__dirname}/./frontend`));
app.all("/*", function (req, res, next) {
if (/^\/simcompanies\/API\/.*/.test(req.url))
req.url = req.url.substring(13);
if (!/^\/API\/.*/.test(req.url)) {
return res.sendFile(path.join(__dirname, 'frontend', 'index.html'));
} else return next();
})
app.get('/API/day', function (req, res) {
const kind = parseInt(req.query.kind);
if (Number.isInteger(kind)) {
//Mock Data:
if (kind === -1) return res.send(mockDataDay);
if (kind >= 1 && kind <= 113) {
var dayend = new Date().toMysqlFormat();
var daybegin = new Date();
daybegin.setDate(daybegin.getDate() - 1);
daybegin = daybegin.toISOString().slice(0, 19).replace('T', ' ');
const querystring = `SELECT time, price, quality FROM marketv2 WHERE kind = ${kind} AND time > "${daybegin}" AND time < "${dayend}" ORDER BY time, quality`;
connection.query(querystring, function (error, results, fields) {
if (error) {
res.status(status.INTERNAL_SERVER_ERROR).send("database connection failed");
}
res.send(results);
});
}
else
res.status(status.BAD_REQUEST).send("invalid data provided");
}
else
res.status(status.BAD_REQUEST).send("invalid data provided");
});
app.get('/API/resourcelist', function (req, res) {
res.send(resourceList);
});
app.listen(3001);