123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219 |
- 'use strict';
- import mariadb from 'mariadb';
- const JOJOAPPS_SERVER_DB = 'localhost';
- const JOJOAPPS_SERVER_DB_SOCKET = '/run/mysqld/mysqld.sock';
- const DATABASE_NAME = 'twelve_heroes';
- export default class MariadbConnector {
- constructor() {
- let host = process.env.DB || JOJOAPPS_SERVER_DB;
- let port = process.env.DB_PORT || 0;
- let database = process.env.DB_NAME || DATABASE_NAME;
- console.log('DB server : ' + host);
- console.log('DB database : ' + database);
- let mariaDbConfig = {
- host,
- user: 'node',
- password: 'nodejs1234',
- database,
- connectionLimit: 5
- };
- if (port === 0) {
- mariaDbConfig.socketPath = JOJOAPPS_SERVER_DB_SOCKET;
- console.log('Will use DB UNIX socket : ' + mariaDbConfig.socketPath);
- } else {
- mariaDbConfig.port = port;
- console.log('Will use DB port : ' + port);
- }
- this.pool = mariadb.createPool(mariaDbConfig);
- }
- async getUsernames() {
- let conn;
- let players = [];
- try {
- conn = await this.pool.getConnection();
- const rows_players = await conn.query('SELECT username FROM players');
- for (const { username: u } of rows_players) {
- players.push(u);
- }
- } finally {
- if (conn && conn !== null) {
- conn.end();
- }
- }
- return players;
- }
- async addPlayer(username) {
- console.log('mariadb add player : ', username);
- let conn;
- try {
- conn = await this.pool.getConnection();
- const val = await conn.query(
- 'INSERT INTO players value (?, NOW(),NULL)',
- [username]
- );
- console.log('OK removing player : ', val);
- return val;
- } catch (err) {
- console.log('error adding player : ', err);
- throw err;
- } finally {
- if (conn && conn !== null) {
- conn.end();
- }
- }
- }
- async removePlayer(username) {
- console.log('mariadb remove player : ', username);
- let conn;
- try {
- conn = await this.pool.getConnection();
- const val = await conn.query('DELETE FROM players WHERE username=?', [
- username
- ]);
- console.log('OK removing player : ', val);
- return val;
- } catch (err) {
- console.log('error removing player : ', err);
- throw err;
- } finally {
- if (conn && conn !== null) {
- conn.end();
- }
- }
- }
- async addNewGame(game) {
- console.log('mariadb add game : ', game);
- let conn;
- try {
- conn = await this.pool.getConnection();
- const val = await conn.query(
- 'INSERT INTO games values (NULL,?,?,?,?,?,?,NOW())',
- [
- game.player1,
- game.player2,
- game.deck,
- convertAdvRulesToString(game.advRules),
- game.status,
- game.data
- ]
- );
- console.log('OK adding game : ', val);
- return val.insertId;
- } catch (err) {
- console.log('error adding game : ', err);
- throw err;
- } finally {
- if (conn && conn !== null) {
- conn.end();
- }
- }
- }
- removeGameById(gameId) {
- return this.removeGame('DELETE FROM games WHERE id=?', [gameId]);
- }
- removeGamesByPlayer1(player1Name) {
- return this.removeGame('DELETE FROM games WHERE player1=?', [player1Name]);
- }
- removeGamesByPlayerAny(playerName) {
- return this.removeGame('DELETE FROM games WHERE player1=? OR player2=?', [
- playerName,
- playerName
- ]);
- }
- removeGamesByStatus(status) {
- return this.removeGame('DELETE FROM games WHERE status=?', [status]);
- }
- removeGamesByDays(days) {
- return this.removeGame(
- 'DELETE FROM games WHERE datediff(NOW(),last_played) > ?',
- [days]
- );
- }
- removeFinishedGamesByDays(days) {
- return this.removeGame(
- "DELETE FROM games WHERE status='FINISHED' AND datediff(NOW(),last_played) > ?",
- [days]
- );
- }
- removeCreatedGamesByPlayer1(player1Name) {
- return this.removeGame(
- "DELETE FROM games WHERE player1=? AND status='CREATED'",
- [player1Name]
- );
- }
- async removeGame(queryStr, queryArgs) {
- console.log('mariadb remove game : ', queryStr);
- let conn;
- try {
- conn = await this.pool.getConnection();
- const val = await conn.query(queryStr, queryArgs);
- console.log('OK removing game : ', val);
- return val;
- } catch (err) {
- console.log('error removing game : ', err);
- throw err;
- } finally {
- if (conn && conn !== null) {
- conn.end();
- }
- }
- }
- async getJoinableGamesForPlayer(username) {
- let conn;
- let games = [];
- try {
- conn = await this.pool.getConnection();
- const res = await conn.query(
- "SELECT * FROM games WHERE (status = 'CREATED' OR status = 'PAUSED') AND(player1 = ? OR player2 = '' OR player2 = ?)",
- [username, username]
- );
- for (const { id, player1, player2, deck, adv_rules } of res) {
- games.push({ id, player1, player2, deck, adv_rules });
- }
- console.log(`returning for ${username} : `, games);
- } finally {
- if (conn && conn !== null) {
- conn.end();
- }
- }
- return games;
- }
- async getGameById(gameId) {
- let conn;
- let game = {};
- try {
- conn = await this.pool.getConnection();
- game = await conn.query('SELECT * FROM games WHERE id=?', gameId);
- } finally {
- if (conn && conn !== null) {
- conn.end();
- }
- }
- return game;
- }
- }
- let convertAdvRulesToString = function(advRulesArray) {
- let advRulestStr = '';
- let last = advRulesArray.length - 1;
- advRulesArray.forEach((rule, index) => {
- advRulestStr += rule;
- if (index < last) {
- advRulestStr += ',';
- }
- });
- return advRulestStr;
- };
|