From cbf9d461bacfa187096e2f982486baf164ec3cdf Mon Sep 17 00:00:00 2001 From: sorrelbri Date: Wed, 1 Jul 2020 11:42:16 -0700 Subject: [PATCH] adjust endGame query to modify record with win information --- .../data/migrations/20200120224032_game.js | 112 +++++++++++------- packages/server/data/queries/game.js | 28 +++-- packages/server/services/gameServices.js | 13 +- 3 files changed, 101 insertions(+), 52 deletions(-) diff --git a/packages/server/data/migrations/20200120224032_game.js b/packages/server/data/migrations/20200120224032_game.js index 67c6a0e..16916df 100644 --- a/packages/server/data/migrations/20200120224032_game.js +++ b/packages/server/data/migrations/20200120224032_game.js @@ -1,49 +1,81 @@ -const winType = [ - 'B+R', 'B+', 'B+T', - 'W+R', 'W+', 'W+T', - '0', 'Void', '?' -] +const winType = ["B+R", "B+", "B+T", "W+R", "W+", "W+T", "0", "Void", "?"]; const rankArray = [ - 'D9', 'D8', 'D7', 'D6', 'D5', 'D4', 'D3', 'D2', 'D1', - 'K1', 'K2', 'K3', 'K4', 'K5', 'K6', 'K7', 'K8', 'K9', 'K10', - 'K11', 'K12', 'K13', 'K14', 'K15', 'K16', 'K17', 'K18', 'K19', 'K20', - 'K21', 'K22', 'K23', 'K24', 'K25', 'K26', 'K27', 'K28', 'K29', 'K30', 'UR' -] + "D9", + "D8", + "D7", + "D6", + "D5", + "D4", + "D3", + "D2", + "D1", + "K1", + "K2", + "K3", + "K4", + "K5", + "K6", + "K7", + "K8", + "K9", + "K10", + "K11", + "K12", + "K13", + "K14", + "K15", + "K16", + "K17", + "K18", + "K19", + "K20", + "K21", + "K22", + "K23", + "K24", + "K25", + "K26", + "K27", + "K28", + "K29", + "K30", + "UR", +]; -exports.up = function(knex) { - return knex.schema.createTable("game", table => { - table.increments('id').primary(); - table.datetime('date'); - table.float('komi').default(6.5); - table.integer('handicap').default(0); - table.integer('board_size').default(19); - table.boolean('open').default(true); +exports.up = function (knex) { + return knex.schema.createTable("game", (table) => { + table.increments("id").primary(); + table.datetime("date"); + table.float("komi").default(6.5); + table.integer("handicap").default(0); + table.integer("board_size").default(19); + table.boolean("open").default(true); - table.string('application'); - table.string('application_version'); + table.string("application"); + table.string("application_version"); table.timestamps(true, true); - table.string('player_black'); - table.string('player_white'); - table.enu('player_black_rank', rankArray).default('UR'); - table.enu('player_white_rank', rankArray).default('UR'); - - table.string('event'); - table.string('name'); - table.string('description'); - table.integer('round'); - - table.enu('win_type', winType); - table.float('score'); - table.integer('captures_black'); - table.integer('captures_white'); + table.string("player_black"); + table.string("player_white"); + table.enu("player_black_rank", rankArray).default("UR"); + table.enu("player_white_rank", rankArray).default("UR"); - table.integer('user_black').references('id').inTable('user'); - table.integer('user_white').references('id').inTable('user'); - table.integer('room').references('id').inTable('room'); - table.integer('time_setting').references('id').inTable('time_setting'); - }) + table.string("event"); + table.string("name"); + table.string("description"); + table.integer("round"); + + table.enu("win_type", winType); + table.float("score"); + table.integer("captures_black"); + table.integer("captures_white"); + + table.integer("user_black").references("id").inTable("user"); + table.integer("user_white").references("id").inTable("user"); + table.integer("room").references("id").inTable("room"); + table.integer("time_setting").references("id").inTable("time_setting"); + }); }; -exports.down = knex => knex.schema.dropTableIfExists("game"); \ No newline at end of file +exports.down = (knex) => knex.schema.dropTableIfExists("game"); diff --git a/packages/server/data/queries/game.js b/packages/server/data/queries/game.js index 4cdf503..4b5a701 100644 --- a/packages/server/data/queries/game.js +++ b/packages/server/data/queries/game.js @@ -70,17 +70,23 @@ const findGameByRoom = async (roomId) => { const insertGame = async (game) => {}; -const endGame = async ({ id }) => { - const game = await knex(game).where({ id: id }).update( - { - win_type: winType, - score: score, - captures_black: capturesBlack, - captures_white: capturesWhite, - } - // ["id"] - ); - return game; +const endGame = async ({ id, winType, score, bCaptures, wCaptures }) => { + try { + const game = await knex + .from("game") + .returning(gameDetailSelect) + .where({ id: id }) + .update({ + win_type: winType, + score: score, + captures_black: bCaptures, + captures_white: wCaptures, + open: false, + }); + return game; + } catch (e) { + return e; + } }; module.exports = { diff --git a/packages/server/services/gameServices.js b/packages/server/services/gameServices.js index c85a83f..039a4fc 100644 --- a/packages/server/services/gameServices.js +++ b/packages/server/services/gameServices.js @@ -73,6 +73,7 @@ const GameService = ({ moveQueries, gameQueries }) => { }, resign: ({ id, player }) => { + // add resign gamesQueries return gamesInProgress[id].submitResign(player).getMeta(); }, @@ -108,9 +109,19 @@ const GameService = ({ moveQueries, gameQueries }) => { async endGame({ id }) { gamesInProgress[id] = gamesInProgress[id].endGame(); + const { winner, score, playerState } = gamesInProgress[id]; + const { bCaptures, wCaptures } = playerState; + const winType = winner > 0 ? "B+" : "W+"; try { if (gameQueries) { - // TODO add end game query + const result = await gameQueries.endGame({ + id, + winType, + score, + bCaptures, + wCaptures, + }); + console.log(result); } } catch (e) { console.log(e);