You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

369 lines
11 KiB
JavaScript

// Strict Mode
"use strict";
// Imports
import mysql from "mysql";
// Connection
const connection = mysql.createConnection({
host: "127.0.0.1",
user: process.env.DATABASE_USER,
password: process.env.DATABASE_PASSWORD,
database: "shootyarena"
});
// Connect
connection.connect(( error ) => {
console.log(error)
if (error) throw error;
});
// Create Tables
async function createTables () {
connection.query("CREATE table users ( username VARCHAR(10) NOT NULL UNIQUE PRIMARY KEY, email VARCHAR(331) NOT NULL UNIQUE, passphrase VARCHAR(60) NOT NULL, active VARCHAR(60) NOT NULL, lastLoginTime INT NOT NULL );", ( error, _ ) => {
if (error) throw error;
});
connection.query("CREATE TABLE stats ( username VARCHAR(10) NOT NULL UNIQUE PRIMARY KEY, FOREIGN KEY(username) REFERENCES users(username), gameRank VARCHAR(13) NOT NULL, elo INT NOT NULL, kills INT NOT NULL, deaths INT NOT NULL );", ( error, _ ) => {
if (error) throw error;
});
connection.query("CREATE TABLE servers ( address VARCHAR(45) UNIQUE, playerLimit INT NOT NULL, playerCount INT NOT NULL );", ( error, _ ) => {
if (error) throw error;
});
connection.query("CREATE TABLE codes ( username VARCHAR(10) NOT NULL UNIQUE PRIMARY KEY, FOREIGN KEY(username) REFERENCES users(username), code INT NOT NULL );", ( error, _ ) => {
if (error) throw error;
})
};
// Drop Tables
async function dropTables () {
connection.query("DROP TABLE servers;", ( error, _ ) => {
if (error) throw error;
});
connection.query("DROP TABLE stats;", ( error, _ ) => {
if (error) throw error;
});
connection.query("DROP TABLE codes;", ( error, _ ) => {
if (error) throw error;
});
connection.query("DROP TABLE users;", ( error, _ ) => {
if (error) throw error;
});
};
// Create User
async function createUser ( username, email, passphrase, active ) {
return new Promise (async ( resolve, _ ) => {
connection.query("INSERT INTO users ( username, email, passphrase, active, lastLoginTime ) VALUES ?;", [[[ username, email, passphrase, active, 0 ]]], ( error, _ ) => {
if (error) {
resolve(false);
} else {
resolve(true);
};
});
});
};
// Create Stat
async function createStat ( username ) {
return new Promise (async ( resolve, _ ) => {
connection.query("INSERT INTO stats ( username, gameRank, elo, kills, deaths ) VALUES ?;", [[[ username, "Shitty Shooty", 800, 0, 0 ]]], ( error, _ ) => {
if (error) {
resolve(false);
} else {
resolve(true);
};
});
});
};
// Create Server
async function createServer ( address, playerLimit ) {
return new Promise (async ( resolve, _ ) => {
connection.query("INSERT INTO servers ( address, playerLimit, playerCount ) VALUES ?;", [[[ address, playerLimit, 0 ]]], ( error, _ ) => {
if (error) {
resolve(false);
} else {
resolve(true);
};
});
});
};
// Create Code
async function createCode ( username, code ) {
return new Promise (async ( resolve, _ ) => {
connection.query("INSERT INTO codes ( username, code ) VALUES ?;", [[[ username, code ]]], ( error, _ ) => {
if (error) {
resolve(false);
} else {
resolve(true);
}
})
})
}
// Delete Server
async function deleteServer ( address ) {
return new Promise (async ( resolve, _ ) => {
connection.query("DELETE FROM servers WHERE address = ?;", [[ address ]], ( error, _ ) => {
if (error) {
resolve(false);
} else {
resolve(true);
};
});
});
};
// Username Exists
async function usernameExists ( username ) {
return new Promise (async ( resolve, _ ) => {
connection.query("SELECT username FROM users WHERE username = ?;", [[ username ]], ( error, result ) => {
console.log(error, result)
if (error || result[0] !== undefined) {
resolve(true);
} else {
resolve(false);
};
});
});
};
// Email Exists
async function emailExists ( email ) {
return new Promise (async ( resolve, _ ) => {
connection.query("SELECT email FROM users WHERE email = ?;", [[ email ]], ( error, result ) => {
if (error || result[0] !== undefined) {
resolve(true);
} else {
resolve(false);
};
});
});
};
// Active Exists
async function activeExists ( active ) {
return new Promise (async ( resolve, _ ) => {
connection.query("SELECT active FROM users WHERE active = ?;", [[ active ]], ( error, result ) => {
if (error || result[0] !== undefined) {
resolve(true);
} else {
resolve(false);
};
});
});
};
// Activate User
async function activateUser ( active ) {
return new Promise (async ( resolve, _ ) => {
connection.query("UPDATE users SET active = '' WHERE active = ?;", [[ active ]], ( error, result ) => {
if (error || result.affectedRows === 0) {
resolve(false);
} else {
resolve(true);
};
});
});
};
// Login User
async function loginUser ( email ) {
return new Promise (async ( resolve, _ ) => {
connection.query("SELECT passphrase FROM users WHERE email = ?;", [[ email ]], ( error, result ) => {
if (error || result[0] === undefined) {
resolve(false);
} else {
resolve(result[0]);
};
});
});
};
// Get All Stats
async function getAllStats () {
return new Promise (async ( resolve, _ ) => {
connection.query("SELECT * FROM stats ORDER BY elo DESC;", ( error, result ) => {
if (error) {
resolve(false);
} else {
resolve(result);
};
});
});
};
// Get Stats
async function getStats ( username ) {
return new Promise (async ( resolve, _ ) => {
connection.query("SELECT gameRank, elo, kills, deaths FROM stats WHERE username = ?;", [[ username ]], ( error, result ) => {
if (error || result[0] === undefined) {
resolve(false);
} else {
resolve(result);
};
});
});
};
// Update Game Rank
async function updateGameRank ( username, gameRank ) {
return new Promise (async ( resolve, _ ) => {
connection.query("UPDATE stats SET gameRank = ? WHERE username = ?;", [[ gameRank ], [ username ]], ( error, result ) => {
if (error || result.affectedRows === 0) {
resolve(false);
} else {
resolve(true);
};
});
});
};
// Update Elo
async function updateElo ( username, elo ) {
return new Promise (async ( resolve, _ ) => {
connection.query("UPDATE stats SET elo = ? WHERE username = ?;", [[ elo ], [ username ]], ( error, result ) => {
if (error || result.affectedRows === 0) {
resolve(false);
} else {
resolve(true);
};
});
});
};
// Update Kills
async function updateKills ( username, kills ) {
return new Promise (async ( resolve, _ ) => {
connection.query("UPDATE stats SET kills = ? WHERE username = ?;", [[ kills ], [ username ]], ( error, result ) => {
if (error || result.affectedRows === 0) {
resolve(false);
} else {
resolve(true);
};
});
});
};
// Update Deaths
async function updateDeaths ( username, deaths ) {
return new Promise (async ( resolve, _ ) => {
connection.query("UPDATE stats SET deaths = ? WHERE username = ?;", [[ deaths ], [ username ]], ( error, result ) => {
if (error || result.affectedRows === 0) {
resolve(false);
} else {
resolve(true);
};
});
});
};
// Get Free Server
async function getFreeServer () {
return new Promise (async ( resolve, _ ) => {
connection.query("SELECT address FROM servers WHERE playerCount < playerLimit ORDER BY playerCount DESC;", ( error, result ) => {
if (error || result[0] === undefined) {
resolve(false);
} else {
resolve(result[0]);
};
});
});
};
// Set Player Count
async function setPlayerCount ( address, playerCount ) {
return new Promise (async ( resolve, _ ) => {
connection.query("UPDATE servers SET playerCount = ? WHERE address = ?;", [[ playerCount ], [ address ]], ( error, _ ) => {
if (error || result.affectedRows === 0) {
resolve(false);
} else {
resolve(true);
};
});
});
};
// Get Active
async function getActive ( email ) {
return new Promise (async ( resolve, _ ) => {
connection.query("SELECT active FROM users WHERE email = ?;", [[email]], ( error, result ) => {
if (error == null && result[0].active == "") {
resolve(true);
} else {
resolve(result[0].active);
}
});
});
};
// Get Username
async function getUsername ( email ) {
return new Promise (async ( resolve, _ ) => {
connection.query("SELECT username FROM users WHERE email = ?;", [[email]], ( error, result ) => {
if (error || result[0] === undefined) {
resolve(false);
} else {
resolve(result[0].username)
}
})
})
}
// Get Code
async function getCode ( username ) {
return new Promise (async ( resolve, _ ) => {
connection.query("SELECT code FROM codes WHERE username = ?;", [[ username ]], ( error, result ) => {
if (error || result[0] === undefined) {
resolve(false);
} else {
resolve(result[0].code);
}
})
})
}
// Set Code
async function setCode ( username, code ) {
return new Promise (async ( resolve, _ ) => {
connection.query("UPDATE codes SET code = ? WHERE username = ?", [[code], [username]], ( error, result ) => {
if (error) {
resolve(false);
} else {
resolve(true);
}
})
})
}
// Exports
module.exports = {
createTables,
dropTables,
createUser,
createStat,
createServer,
deleteServer,
usernameExists,
emailExists,
activeExists,
activateUser,
loginUser,
getAllStats,
getStats,
updateGameRank,
updateElo,
updateKills,
updateDeaths,
getFreeServer,
setPlayerCount,
getActive,
getUsername,
createCode,
getCode,
setCode,
};