140 lines
5.1 KiB
JavaScript
140 lines
5.1 KiB
JavaScript
const database = require('./../database');
|
|
|
|
|
|
|
|
|
|
|
|
class Game {
|
|
constructor(id, date, team1ID, team2ID, team1Score, team2Score, divisionID, seasonID, submitterID, submitterName) {
|
|
this.id = id;
|
|
this.date = date;
|
|
this.team1ID = team1ID;
|
|
this.team2ID = team2ID;
|
|
this.team1Score = team1Score;
|
|
this.team2Score = team2Score;
|
|
this.divisionID = divisionID;
|
|
this.seasonID = seasonID;
|
|
this.submitterID = submitterID;
|
|
this.submitterName = submitterName;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
async function add(divisionID, seasonID, date, team1ID, team2ID, team1Score, team2Score, submitterID, submitterName = undefined) {
|
|
let id;
|
|
if(submitterName) {
|
|
const query = `INSERT INTO scores.games(division_id, season_id, game_date, team1_id, team2_id, team1_score, team2_score, submitter_name)
|
|
VALUES($1, $2, $3, $4, $5, $6, $7, $8)
|
|
RETURNING game_id;`;
|
|
id = (await database.executeQuery(query, [divisionID, seasonID, date, team1ID, team2ID, team1Score, team2Score, submitterName]))[0][0];
|
|
} else {
|
|
const query = `INSERT INTO scores.games(division_id, season_id, game_date, team1_id, team2_id, team1_score, team2_score, submitter_id)
|
|
VALUES($1, $2, $3, $4, $5, $6, $7, $8)
|
|
RETURNING game_id;`;
|
|
id = (await database.executeQuery(query, [divisionID, seasonID, date, team1ID, team2ID, team1Score, team2Score, submitterID]))[0][0];
|
|
}
|
|
|
|
return new Game(id, date, team1ID, team2ID, team1Score, team2Score);
|
|
}
|
|
|
|
async function remove(id) {
|
|
const query = `DELETE FROM scores.games
|
|
WHERE game_id = $1
|
|
RETURNING * ;`;
|
|
const row = (await database.executeQuery(query, [id]))[0];
|
|
return new Game(id, row[3], row[4], row[5], row[6], row[7]);
|
|
}
|
|
|
|
async function retrieve(teamID, divisionID, seasonID) {
|
|
let table;
|
|
|
|
if(teamID && divisionID && seasonID) {
|
|
const query = `SELECT game_id, division_id, season_id, game_date, team1_id, team2_id, team1_score, team2_score, submitter_id, submitter_name
|
|
FROM scores.games
|
|
WHERE (team1_id = $1 OR team2_id = $1) AND division_id = $2 AND season_id = $3
|
|
ORDER BY game_date DESC;`;
|
|
table = await database.executeQuery(query, [teamID,divisionID,seasonID]);
|
|
}
|
|
else {
|
|
const query = `SELECT game_id, division_id, season_id, game_date, team1_id, team2_id, team1_score, team2_score, submitter_id, submitter_name
|
|
FROM scores.games
|
|
ORDER BY game_date DESC;`;
|
|
table = await database.executeQuery(query);
|
|
}
|
|
|
|
|
|
const gamesList = [];
|
|
table.forEach((row) => {
|
|
if(teamID) {
|
|
const opponentIsTeam2 = teamID != row[5];
|
|
const opponentID = opponentIsTeam2 ? row[5] : row[4];
|
|
const teamScore = opponentIsTeam2 ? row[6] : row[7];
|
|
const opponentScore = opponentIsTeam2 ? row[7] : row[6];
|
|
|
|
gamesList.push(new Game(row[0], row[3].toISOString().slice(0,10), teamID, opponentID, teamScore, opponentScore, row[1], row[2], row[8], row[9]));
|
|
}
|
|
else {
|
|
gamesList.push(new Game(row[0], row[3].toISOString().slice(0,10), row[4], row[5], row[6], row[7], row[1], row[2], row[8], row[9]));
|
|
}
|
|
});
|
|
return gamesList;
|
|
}
|
|
|
|
async function retrieveByUser(userID) {
|
|
const query = `SELECT game_id, division_id, season_id, game_date, team1_id, team2_id, team1_score, team2_score
|
|
FROM scores.games
|
|
WHERE submitter_id = $1
|
|
ORDER BY game_date DESC;`;
|
|
const table = await database.executeQuery(query, [userID]);
|
|
|
|
const gamesList = [];
|
|
table.forEach((row) => {
|
|
gamesList.push(new Game(row[0], row[3].toISOString().slice(0,10), row[4], row[5], row[6], row[7], row[1], row[2]));
|
|
});
|
|
return gamesList;
|
|
}
|
|
|
|
async function edit(gameID, divisionID, seasonID, date, team1ID, team2ID, team1Score, team2Score) {
|
|
const query = `UPDATE scores.games
|
|
SET division_id = $2,
|
|
season_id = $3,
|
|
game_date = $4,
|
|
team1_id = $5,
|
|
team2_id = $6,
|
|
team1_score = $7,
|
|
team2_score = $8
|
|
WHERE game_id = $1;`;
|
|
await database.executeQuery(query, [gameID, divisionID, seasonID, date, team1ID, team2ID, team1Score, team2Score]);
|
|
return new Game(gameID, date, team1ID, team2ID, team1Score, team2Score, divisionID, seasonID);
|
|
}
|
|
|
|
async function getFromID(gameID) {
|
|
const query = `SELECT game_id, division_id, season_id, game_date, team1_id, team2_id, team1_score, team2_score, submitter_id
|
|
FROM scores.games
|
|
WHERE game_id = $1;`;
|
|
const row = (await database.executeQuery(query, [gameID]))[0];
|
|
return new Game(row[0], row[3].toISOString().slice(0,10), row[4], row[5], row[6], row[7], row[1], row[2], row[8]);
|
|
}
|
|
|
|
async function getLatest(userID = undefined) {
|
|
if(userID) {
|
|
const games = await retrieveByUser(userID);
|
|
return games[0];
|
|
} else {
|
|
const games = await retrieve();
|
|
return games[0];
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
exports.add = add;
|
|
exports.remove = remove;
|
|
exports.retrieve = retrieve;
|
|
exports.retrieveByUser = retrieveByUser;
|
|
exports.edit = edit;
|
|
exports.getFromID = getFromID;
|
|
exports.getLatest = getLatest; |