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
369 lines
11 KiB
JavaScript
1 year ago
|
// 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,
|
||
|
|
||
|
};
|