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.
cardGame/database.js

264 lines
5.8 KiB
JavaScript

const mysql = require('mysql');
const con = mysql.createConnection({
host: "localhost",
user: "realmsdivided",
password: "realmsdivided",
database: "realms_divided"
});
function connect(){
con.connect(function(err) {
if (err) { console.log(err); }
else { console.log('DB Connected'); }
});
}
function disconnect(){
con.end();
}
// My DB stuffs
function dbGetDecks(deckIds = false){
const dPromise = new Promise((resolve, reject) => {
let cards = [];
let sql = `SELECT
deckId
,playerId
,deckName
FROM deck
`;
// TODO: Jank, need to unjank it
if(deckIds){
for(let i = 0; i < deckIds.length; i++){
if(i == 0){ sql += ' WHERE '; }
else{ sql += ' OR '; }
sql += '(deckId = '+deckIds[i][1]+' AND playerId = '+deckIds[i][0]+')';
}
}
con.query(sql, function (err, result, fields) {
if (err) { throw err; reject(new Error(err)); }
resolve(result);
});
});
return dPromise;
}
function dbGetDeckList(deckIds = false){
const dPromise = new Promise((resolve, reject) => {
let cards = [];
let sql = `SELECT
deckId
,playerId
,cardId
,cardCount
FROM deck_cards
`;
// TODO: Jank, need to unjank it
if(deckIds){
for(let i = 0; i < deckIds.length; i++){
if(i == 0){ sql += ' WHERE '; }
else{ sql += ' OR '; }
sql += '(deckId = '+deckIds[i][1]+' AND playerId = '+deckIds[i][0]+')';
}
}
con.query(sql, function (err, result, fields) {
if (err) { throw err; reject(new Error(err)); }
resolve(result);
});
});
return dPromise;
}
function dbGetCards(cardIds = false){
// Start with basic stuff in card table
const dPromise = new Promise((resolve, reject) => {
let sql = `SELECT
id
,cardName
,cardCost
,cardType
,cardAttack
,cardRarity
FROM card
`;
if(cardIds){ sql += 'WHERE card.id IN ('+cardIds+')'; }
con.query(sql, function (err, result, fields) {
if (err) { throw err; reject(new Error(err)); }
resolve(result);
});
});
return dPromise;
}
function dbGetCardClasses(cardIds = false){
// Get the classes assoc. on each card
const dPromise = new Promise((resolve, reject) => {
let sql = `SELECT
cardId
,classId
FROM card_class
`;
if(cardIds){ sql += 'WHERE cardId IN ('+cardIds+')'; }
con.query(sql, function (err, result, fields) {
if (err) { throw err; reject(new Error(err)); }
resolve(result);
});
});
return dPromise;
}
function dbGetCardColourRequirement(cardIds = false){
// Get the classes assoc. on each card
const dPromise = new Promise((resolve, reject) => {
let sql = `SELECT
cardId
,colourId
,cost
FROM card_colour_requirement
`;
if(cardIds){ sql += 'WHERE cardId IN ('+cardIds+')'; }
con.query(sql, function (err, result, fields) {
if (err) { throw err; reject(new Error(err)); }
resolve(result);
});
});
return dPromise;
}
function dbGetCardManaColour(cardIds = false){
// Get the classes assoc. on each card
const cPromise = new Promise((resolve, reject) => {
let sql = `SELECT
cardId
,colourId
FROM card_mana_colour
`;
if(cardIds){ sql += 'WHERE cardId IN ('+cardIds+')'; }
con.query(sql, function (err, result, fields) {
if (err) { throw err; reject(new Error(err)); }
resolve(result);
});
});
return cPromise;
}
// Effect stuff
function dbGetEffect(cardIds = false){
const ePromise = new Promise((resolve, reject) => {
let sql = `SELECT
cardId
,effectId
,description
FROM card_effect
INNER JOIN effect
ON effect.id = card_effect.effectId
`;
if(cardIds){ sql += 'WHERE cardId IN ('+cardIds+')'; }
con.query(sql, function (err, result, fields) {
if (err) { throw err; reject(new Error(err)); }
resolve(result);
});
});
return ePromise;
}
function dbGetEffectStep(effectIds = false){
const ePromise = new Promise((resolve, reject) => {
let sql = `SELECT
effectId,
effect_step.id AS stepId,
stepOrder,
basicEffectId,
amount,
colourId,
typeId,
classId,
passiveId,
itemFromStep
FROM effect_step
LEFT JOIN -- May not be a target?
effect_step_target
ON effect_step_target.effectStep = effect_step.id
`;
if(effectIds){ sql += 'WHERE effectId IN ('+effectIds+')'; }
con.query(sql, function (err, result, fields) {
if (err) { throw err; reject(new Error(err)); }
resolve(result);
});
});
return ePromise;
}
// Effect Trigger stuff
function dbGetEffectTrigger(effectIds = false){
const ePromise = new Promise((resolve, reject) => {
let sql = `SELECT
effect_trigger.id AS triggerId,
cardId,
effectId,
triggerTypeId,
amount,
colourId,
typeId,
classId,
passiveId
FROM effect_trigger
INNER JOIN card_effect
ON card_effect.effectId = effect_trigger.cardEffectId
INNER JOIN trigger_type
ON trigger_type.id = effect_trigger.triggerTypeId
LEFT JOIN -- May not be a target
effect_trigger_target
ON effect_trigger_target.effectTriggerId = effect_trigger.triggerTypeId
`;
if(effectIds){ sql += 'WHERE effectId IN ('+effectIds+')'; }
con.query(sql, function (err, result, fields) {
if (err) { throw err; reject(new Error(err)); }
resolve(result);
});
});
return ePromise;
}
// Passive stuff
function dbGetPassive(cardIds = false){
const pPromise = new Promise((resolve, reject) => {
let sql = `SELECT
cardId
,passiveId
FROM card_passive
`;
if(cardIds){ sql += 'WHERE card.id IN ('+cardIds+')'; }
con.query(sql, function (err, result, fields) {
if (err) { throw err; reject(new Error(err)); }
resolve(result);
});
});
return pPromise;
}
module.exports = {
connect, disconnect
// Testing, and trailing
, dbGetDecks
, dbGetDeckList
, dbGetCards
, dbGetCardClasses
, dbGetCardColourRequirement
, dbGetCardManaColour
, dbGetEffect
, dbGetEffectStep
, dbGetEffectTrigger
, dbGetPassive
};