Major dev session
This commit is contained in:
parent
53f166bb3d
commit
665ad0dd38
|
@ -8,7 +8,6 @@ let tmdb = require("./tmdb.js");
|
||||||
// #region Express setup
|
// #region Express setup
|
||||||
const app = express();
|
const app = express();
|
||||||
const port = 3000;
|
const port = 3000;
|
||||||
//app.engine('html', require('ejs').renderFile);
|
|
||||||
app.listen(port, () => {
|
app.listen(port, () => {
|
||||||
console.log(`Listening on port ${port}`)
|
console.log(`Listening on port ${port}`)
|
||||||
})
|
})
|
||||||
|
@ -16,6 +15,13 @@ app.use(express.json());
|
||||||
app.use(express.urlencoded({ extended: true }));
|
app.use(express.urlencoded({ extended: true }));
|
||||||
let api = express.Router();
|
let api = express.Router();
|
||||||
app.use("/api", api);
|
app.use("/api", api);
|
||||||
|
|
||||||
|
api.use(function(req, res, next) {
|
||||||
|
res.header("Access-Control-Allow-Origin", "*");
|
||||||
|
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
|
||||||
|
next();
|
||||||
|
});
|
||||||
|
|
||||||
// #endregion
|
// #endregion
|
||||||
|
|
||||||
// #region frontend
|
// #region frontend
|
||||||
|
@ -28,8 +34,21 @@ api.get("/", (req, res) => {
|
||||||
// #region API
|
// #region API
|
||||||
api.get("/tournament/getTournaments", (req, res) => {
|
api.get("/tournament/getTournaments", (req, res) => {
|
||||||
tmdb.getTournaments()
|
tmdb.getTournaments()
|
||||||
.then(tournaments => {res.json({"status": "OK", "data": tournaments}); })
|
.then(tournaments => res.json({"status": "OK", "data": tournaments}))
|
||||||
.catch(err => {res.json({"status": "error", "data": err}); });
|
.catch(err => res.json({"status": "error", "data": err}));
|
||||||
|
});
|
||||||
|
|
||||||
|
api.get("/tournament/:tournamentId", (req, res) => {
|
||||||
|
let tournamentId = req.params.tournamentId;
|
||||||
|
if (isNaN(tournamentId)) {
|
||||||
|
res.json({"status": "error", "data": "Invalid tournament id"});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
tmdb.getTournament(parseInt(tournamentId))
|
||||||
|
.catch(err => res.json({"status": "error", "data": err}))
|
||||||
|
.then(tournament => res.json({"status": "OK", "data": tournament}));
|
||||||
|
// .then(tournament => res.json({"status": "OK", "data": tournament}));
|
||||||
|
// .then(console.log("lol"))
|
||||||
});
|
});
|
||||||
|
|
||||||
api.get("/tournament/:tournamentId/getMatches", (req, res) => {
|
api.get("/tournament/:tournamentId/getMatches", (req, res) => {
|
||||||
|
@ -40,8 +59,8 @@ api.get("/tournament/:tournamentId/getMatches", (req, res) => {
|
||||||
}
|
}
|
||||||
tournamentId = parseInt(tournamentId);
|
tournamentId = parseInt(tournamentId);
|
||||||
tmdb.getMatchesByTournamentId(tournamentId)
|
tmdb.getMatchesByTournamentId(tournamentId)
|
||||||
.then(matches => res.send({"status": "OK", "data": matches}))
|
.then(matches => res.send({"status": "OK", "data": matches}))
|
||||||
.catch(err => res.send({"status": "error", "data": err}));
|
.catch(err => res.send({"status": "error", "data": err}));
|
||||||
});
|
});
|
||||||
|
|
||||||
api.get("/match/:matchId/getMatch", (req, res) => {
|
api.get("/match/:matchId/getMatch", (req, res) => {
|
||||||
|
@ -52,11 +71,11 @@ api.get("/match/:matchId/getMatch", (req, res) => {
|
||||||
}
|
}
|
||||||
matchId = parseInt(matchId);
|
matchId = parseInt(matchId);
|
||||||
tmdb.getMatch(matchId)
|
tmdb.getMatch(matchId)
|
||||||
.then(match => res.send({"status": "OK", "data": match}))
|
.then(match => res.send({"status": "OK", "data": match}))
|
||||||
.catch(err => res.send({"status": "error", "data": err}));
|
.catch(err => res.send({"status": "error", "data": err}));
|
||||||
});
|
});
|
||||||
|
|
||||||
// JSON body: {"winner": "teamId"}
|
// JSON body: {"winner": teamId}
|
||||||
api.post("/match/:matchId/setWinner", (req, res) => {
|
api.post("/match/:matchId/setWinner", (req, res) => {
|
||||||
let matchId = req.params.matchId;
|
let matchId = req.params.matchId;
|
||||||
let winnerId = req.body.winnerId;
|
let winnerId = req.body.winnerId;
|
||||||
|
@ -72,7 +91,62 @@ api.post("/match/:matchId/setWinner", (req, res) => {
|
||||||
matchId = parseInt(matchId);
|
matchId = parseInt(matchId);
|
||||||
winnerId = parseInt(winnerId);
|
winnerId = parseInt(winnerId);
|
||||||
tmdb.setMatchWinner(matchId, winnerId)
|
tmdb.setMatchWinner(matchId, winnerId)
|
||||||
.then(match => res.send({"status": "OK", "data": match}))
|
.then(match => res.send({"status": "OK", "data": match}))
|
||||||
.catch(err => res.send({"status": "error", "data": err}));
|
.catch(err => res.send({"status": "error", "data": err}));
|
||||||
|
});
|
||||||
|
|
||||||
|
//Takes JSON body
|
||||||
|
api.post("/tournament/create", (req, res) => {
|
||||||
|
//Check that req body is valid
|
||||||
|
if (req.body.name == undefined || req.body.name == "") {
|
||||||
|
res.json({"status": "error", "data": "No data supplied"});
|
||||||
|
return
|
||||||
|
}
|
||||||
|
//Check that req is json
|
||||||
|
// if (req.get("Content-Type") != "application/json") {
|
||||||
|
console.log(req.get("Content-Type"));
|
||||||
|
let name = req.body.name;
|
||||||
|
let description = req.body.description;
|
||||||
|
let teamLimit = req.body.teamLimit;
|
||||||
|
let startDate = req.body.startDate;
|
||||||
|
let endDate = req.body.endDate;
|
||||||
|
if (name == undefined || name == "" || description == undefined || description == "") {
|
||||||
|
res.json({"status": "error", "data": "name and description must be provided"});
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (teamLimit == undefined ) {
|
||||||
|
res.json({"status": "error", "data": "teamLimit must be provided"});
|
||||||
|
return
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
teamLimit = parseInt(teamLimit);
|
||||||
|
} catch (err) {
|
||||||
|
res.json({"status": "error", "data": "teamLimit must be a number"});
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (startDate == undefined || endDate == undefined) {
|
||||||
|
res.json({"status": "error", "data": "startDate and endDate must be defined"});
|
||||||
|
return
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
startDate = new Date(startDate);
|
||||||
|
endDate = new Date(endDate);
|
||||||
|
} catch (err) {
|
||||||
|
res.json({"status": "error", "data": "startDate and endDate must be valid dates"});
|
||||||
|
return
|
||||||
|
}
|
||||||
|
let today = new Date();
|
||||||
|
if (startDate < today) {
|
||||||
|
res.json({"status": "error", "data": "startDate cannot be in the past"});
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (startDate > endDate) {
|
||||||
|
res.json({"status": "error", "data": "startDate cannot be after endDate"});
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
tmdb.createTournament(name, description, startDate, endDate, teamLimit)
|
||||||
|
.catch(err => res.json({"status": "error", "data": err}))
|
||||||
|
.then(msg => res.json({"status": "OK", "data": msg}));
|
||||||
});
|
});
|
||||||
// #endregion
|
// #endregion
|
|
@ -10,6 +10,7 @@ CREATE TABLE tournaments (
|
||||||
id INTEGER PRIMARY KEY AUTO_INCREMENT,
|
id INTEGER PRIMARY KEY AUTO_INCREMENT,
|
||||||
name TEXT NOT NULL,
|
name TEXT NOT NULL,
|
||||||
description TEXT,
|
description TEXT,
|
||||||
|
teamLimit INTEGER NOT NULL,
|
||||||
startTime DATETIME NOT NULL,
|
startTime DATETIME NOT NULL,
|
||||||
endTime DATETIME NOT NULL
|
endTime DATETIME NOT NULL
|
||||||
);
|
);
|
||||||
|
@ -44,8 +45,8 @@ CREATE TABLE players (
|
||||||
);
|
);
|
||||||
|
|
||||||
-- Example data (Two tournaments, 4 teams, single elimination)
|
-- Example data (Two tournaments, 4 teams, single elimination)
|
||||||
INSERT INTO tournaments (name, description, startTime, endTime) VALUES ('Tournament 1', 'First tournament, single elimination', '2022-04-01 16:00:00', '2022-04-01 20:00:00');
|
INSERT INTO tournaments (name, description, startTime, endTime, teamLimit) VALUES ('Tournament 1', 'First tournament, single elimination', '2022-04-01 16:00:00', '2022-04-01 20:00:00', 4);
|
||||||
INSERT INTO tournaments (name, description, startTime, endTime) VALUES ('Tournament 2', 'Second tournament, four teams', '2022-04-03 17:30:00', '2022-04-02 21:30:00');
|
INSERT INTO tournaments (name, description, startTime, endTime, teamLimit) VALUES ('Tournament 2', 'Second tournament, four teams', '2022-04-03 17:30:00', '2022-04-04 21:30:00', 4);
|
||||||
|
|
||||||
INSERT INTO teams (tournamentId, name) VALUES (1, 'Fnatic'); -- 1
|
INSERT INTO teams (tournamentId, name) VALUES (1, 'Fnatic'); -- 1
|
||||||
INSERT INTO teams (tournamentId, name) VALUES (1, 'Cloud 9'); -- 2
|
INSERT INTO teams (tournamentId, name) VALUES (1, 'Cloud 9'); -- 2
|
||||||
|
|
|
@ -1217,9 +1217,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/minimist": {
|
"node_modules/minimist": {
|
||||||
"version": "1.2.5",
|
"version": "1.2.6",
|
||||||
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
|
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
|
||||||
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
|
"integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/moment": {
|
"node_modules/moment": {
|
||||||
|
@ -3073,9 +3073,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"minimist": {
|
"minimist": {
|
||||||
"version": "1.2.5",
|
"version": "1.2.6",
|
||||||
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
|
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
|
||||||
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
|
"integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"moment": {
|
"moment": {
|
||||||
|
|
|
@ -4,11 +4,12 @@
|
||||||
module.exports = {
|
module.exports = {
|
||||||
getMatchesByTournamentId: getMatchesByTournamentId,
|
getMatchesByTournamentId: getMatchesByTournamentId,
|
||||||
getTournaments: getTournaments,
|
getTournaments: getTournaments,
|
||||||
|
getTournament, getTournament,
|
||||||
getMatch: getMatch,
|
getMatch: getMatch,
|
||||||
setMatchWinner: setMatchWinner,
|
setMatchWinner: setMatchWinner,
|
||||||
|
createTournament: createTournament,
|
||||||
}
|
}
|
||||||
|
|
||||||
const { query } = require("express");
|
|
||||||
const mysql = require("mysql");
|
const mysql = require("mysql");
|
||||||
|
|
||||||
let connection = mysql.createConnection({
|
let connection = mysql.createConnection({
|
||||||
|
@ -44,6 +45,25 @@ function getTournaments() {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getTournament(tournamentId) {
|
||||||
|
return new Promise(function(resolve, reject) {
|
||||||
|
connection.query("SELECT * FROM tournaments WHERE id = ?", [mysql.escape(tournamentId)], (err, tournaments) => {
|
||||||
|
if (err) {
|
||||||
|
console.log(err);
|
||||||
|
reject(err);
|
||||||
|
} else {
|
||||||
|
if (tournaments.length == 0) {
|
||||||
|
reject("No such tournament exists");
|
||||||
|
}
|
||||||
|
//TODO number of competing teams
|
||||||
|
|
||||||
|
let tournament = tournaments[0];
|
||||||
|
resolve(tournament);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Returns the match of the exact given id.
|
// Returns the match of the exact given id.
|
||||||
function getMatch(matchId) {
|
function getMatch(matchId) {
|
||||||
return new Promise(function(resolve, reject) {
|
return new Promise(function(resolve, reject) {
|
||||||
|
@ -54,7 +74,9 @@ function getMatch(matchId) {
|
||||||
if (matches.length == 0) {
|
if (matches.length == 0) {
|
||||||
reject("No such match exists");
|
reject("No such match exists");
|
||||||
}
|
}
|
||||||
resolve(matches[0]);
|
|
||||||
|
let match = matches[0];
|
||||||
|
resolve(match);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -126,6 +148,22 @@ function setMatchWinner(matchId, winnerId) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function createTournament(name, description, startDate, endDate, teamLimit) {
|
||||||
|
startDate = startDate.toISOString().slice(0, 19).replace('T', ' ');
|
||||||
|
endDate = endDate.toISOString().slice(0, 19).replace('T', ' ');
|
||||||
|
return new Promise(function(resolve, reject) {
|
||||||
|
connection.query("INSERT INTO tournaments (name, description, startTime, endTime, teamLimit) VALUES (?, ?, ?, ?, ?)",
|
||||||
|
[mysql.escape(name), mysql.escape(description), startDate, endDate, teamLimit], (err, sets) => {
|
||||||
|
if (err) {
|
||||||
|
console.log(err);
|
||||||
|
reject(err);
|
||||||
|
} else {
|
||||||
|
resolve("Tournament created");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Dangerous function, use with caution.
|
// Dangerous function, use with caution.
|
||||||
// Used to initialize and manage the database by management tools, not by the main application.
|
// Used to initialize and manage the database by management tools, not by the main application.
|
||||||
|
|
Loading…
Reference in New Issue