7 Commits

Author SHA1 Message Date
6c174948f8 prepare for new mockdata
All checks were successful
SimcoDash/simcompanies-dashboard/pipeline/head This commit looks good
2020-05-29 19:42:42 +02:00
92e630f24f add backend readme
closes #77
2020-05-29 19:37:46 +02:00
e40cc80ec2 remove package-lock
closes #79
2020-05-29 19:30:25 +02:00
cefe56cd11 Merge branch 'market-cap-view' of cloud.ol:oliver/simcompanies-dashboard into market-cap-view
All checks were successful
SimcoDash/simcompanies-dashboard/pipeline/head This commit looks good
2020-05-29 19:26:17 +02:00
57c4bf2c38 add amount endpoints 2020-05-29 19:26:11 +02:00
1ffcd56342 changed api endpoint
All checks were successful
SimcoDash/simcompanies-dashboard/pipeline/head This commit looks good
2020-05-29 19:20:48 +02:00
93a811fb08 change price API endpoint route
All checks were successful
SimcoDash/simcompanies-dashboard/pipeline/head This commit looks good
2020-05-29 19:18:15 +02:00
4 changed files with 116 additions and 1766 deletions

18
backend/README.md Normal file
View File

@@ -0,0 +1,18 @@
# Backend for the Simcompanies-Dashboard
## Available Scripts
In the project directory, you can run:
### `yarn start`
Runs the app in the production mode.<br />
Access the API and frontend files on [http://localhost:3001](http://localhost:3001) to view it in the browser.
### `npm run debug`
Runs the app in the developement mode.<br />
Access the API and frontend files on [http://localhost:3001](http://localhost:3001) to view it in the browser.
You can only login with the credentials "test" "test".
The server reloads on changes you still need to refresh your browserpage yourself.

View File

@@ -33,6 +33,9 @@ var sessionStore = new MySQLStore({
const mockDataDay = require('./mockdata-test/day.json');
const mockDataWeek = require('./mockdata-test/week.json');
const mockDataMonth = require('./mockdata-test/month.json');
//const mockAmountDataDay = require('./mockdata-test/amountDay.json');
//const mockAmountDataWeek = require('./mockdata-test/amountWeek.json');
//const mockAmountDataMonth = require('./mockdata-test/amountMonth.json');
var resourceList;
const saltRounds = 13;
@@ -199,7 +202,7 @@ app.delete("/API/user/logout", function (req, res) {
return res.status(status.OK).send("logout success");
});
app.get('/API/day', function (req, res) {
app.get('/API/price/day', function (req, res) {
const kind = parseInt(req.query.kind);
if (Number.isInteger(kind)) {
//Mock Data:
@@ -226,7 +229,34 @@ app.get('/API/day', function (req, res) {
return res.status(status.BAD_REQUEST).send("invalid data provided");
});
app.get('/API/week', function (req, res) {
app.get('/API/amount/day', function (req, res) {
const kind = parseInt(req.query.kind);
if (Number.isInteger(kind)) {
//Mock Data:
if (kind === -1 || DEBUG) return res.send(mockAmountDataDay);
if (kind >= 1 && kind <= 113) {
var dayend = new Date().toMysqlFormat();
var daybegin = new Date();
daybegin.setDate(daybegin.getDate() - 1);
daybegin = daybegin.toMysqlFormat();
const querystring = `SELECT time, quality, amount FROM marketcap WHERE kind = ${kind} AND time > "${daybegin}" AND time < "${dayend}" ORDER BY time, quality`;
connection.query(querystring, function (error, results, fields) {
if (error) {
return res.status(status.INTERNAL_SERVER_ERROR).send("database connection failed");
}
return res.send(results);
});
}
else
return res.status(status.BAD_REQUEST).send("invalid data range provided");
}
else
return res.status(status.BAD_REQUEST).send("invalid data provided");
});
app.get('/API/price/week', function (req, res) {
const kind = parseInt(req.query.kind);
if (Number.isInteger(kind)) {
//Mock Data:
@@ -259,7 +289,70 @@ app.get('/API/week', function (req, res) {
return res.status(status.BAD_REQUEST).send("invalid data provided");
});
app.get('/API/month', function (req, res) {
app.get('/API/amount/week', function (req, res) {
const kind = parseInt(req.query.kind);
if (Number.isInteger(kind)) {
//Mock Data:
if (kind === -1 || DEBUG) return res.send(mockAmountDataWeek);
if (kind >= 1 && kind <= 113) {
var day = new Date();
day.setDate(day.getDate() - 6)
var querying = "";
for (let i = 0; i < 7; i++) {
let currentday = day.toMysqlFormat().split(" ")[0];
querying += `SELECT "${currentday + " 3:00:00"}" as time,kind,quality,AVG(amount) as amount FROM marketcap WHERE kind = ${kind} AND TIME > "${currentday} 00:00:00" AND TIME <= "${currentday} 05:59:59" GROUP BY kind,quality UNION `;
querying += `SELECT "${currentday + " 09:00:00"}" as time,kind,quality,AVG(amount) as amount FROM marketcap WHERE kind = ${kind} AND TIME > "${currentday} 6:00:00" AND TIME <= "${currentday} 11:59:59" GROUP BY kind,quality UNION `;
querying += `SELECT "${currentday + " 15:00:00"}" as time,kind,quality,AVG(amount) as amount FROM marketcap WHERE kind = ${kind} AND TIME > "${currentday} 12:00:00" AND TIME <= "${currentday} 17:59:59" GROUP BY kind,quality UNION `;
querying += `SELECT "${currentday + " 21:00:00"}" as time,kind,quality,AVG(amount) as amount FROM marketcap WHERE kind = ${kind} AND TIME > "${currentday} 18:00:00" AND TIME <= "${currentday} 23:59:59" GROUP BY kind,quality ${i === 6 ? "" : "UNION"} `;
day.setDate(day.getDate() + 1);
}
connection.query(querying, function (error, results, fields) {
if (error) {
return res.status(status.INTERNAL_SERVER_ERROR).send("database connection failed");
}
return res.send(results);
});
}
else
return res.status(status.BAD_REQUEST).send("invalid data range provided");
}
else
return res.status(status.BAD_REQUEST).send("invalid data provided");
});
app.get('/API/price/month', function (req, res) {
const kind = parseInt(req.query.kind);
if (Number.isInteger(kind)) {
//Mock Data:
if (kind === -1 || DEBUG) return res.send(mockAmountDataMonth);
if (kind >= 1 && kind <= 113) {
var day = new Date();
day.setDate(day.getDate() - 29);
var querying = "";
for (let i = 0; i < 30; i++) {
let currentday = day.toMysqlFormat().split(" ")[0];
querying += `SELECT "${currentday}" as time,kind,quality,AVG(price) as price FROM marketv2 WHERE kind = ${kind} AND TIME >= "${currentday} 00:00:00" AND TIME <= "${currentday} 23:59:59" GROUP BY kind,quality ${i === 29 ? "" : "UNION"} `;
day.setDate(day.getDate() + 1);
}
connection.query(querying, function (error, results, fields) {
if (error) {
return res.status(status.INTERNAL_SERVER_ERROR).send("database connection failed");
}
return res.send(results);
});
}
else
return res.status(status.BAD_REQUEST).send("invalid data range provided");
}
else
return res.status(status.BAD_REQUEST).send("invalid data provided");
});
app.get('/API/amount/month', function (req, res) {
const kind = parseInt(req.query.kind);
if (Number.isInteger(kind)) {
//Mock Data:
@@ -271,7 +364,7 @@ app.get('/API/month', function (req, res) {
var querying = "";
for (let i = 0; i < 30; i++) {
let currentday = day.toMysqlFormat().split(" ")[0];
querying += `SELECT "${currentday}" as time,kind,quality,AVG(price) as price FROM marketv2 WHERE kind = ${kind} AND TIME >= "${currentday} 00:00:00" AND TIME <= "${currentday} 23:59:59" GROUP BY kind,quality ${i === 29 ? "" : "UNION"} `;
querying += `SELECT "${currentday}" as time,kind,quality,AVG(amount) as amount FROM marketcap WHERE kind = ${kind} AND TIME >= "${currentday} 00:00:00" AND TIME <= "${currentday} 23:59:59" GROUP BY kind,quality ${i === 29 ? "" : "UNION"} `;
day.setDate(day.getDate() + 1);
}
connection.query(querying, function (error, results, fields) {

1761
backend/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -45,7 +45,7 @@ export default function ResourceChart(props) {
if (loading === null) {
setLoading(<LinearProgress />)
}
let dayData = await fetch(`/simcompanies/API/${interval}?kind=${id}`);
let dayData = await fetch(`/simcompanies/API/price/${interval}?kind=${id}`);
let dataWithDate = await dayData.json();
let qualitySortedData = [];
for (let i = 0; i < dataWithDate.length; i++) {