diff --git a/package.json b/package.json index d481bad..7d628df 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,9 @@ "preset": "ts-jest" }, "lint-staged": { - "*.(js|ts|tsx)": "yarn lint", - "src/*": "prettier --write" + "*.(js|ts|tsx)": [ + "yarn pretty", + "yarn lint" + ] } } diff --git a/src/routes/createGame.ts b/src/routes/createGame.ts index 919d028..f6f35a7 100644 --- a/src/routes/createGame.ts +++ b/src/routes/createGame.ts @@ -35,6 +35,7 @@ router.get( client .connect() .then(async () => { + // Define queries const createPlayerQuery = 'INSERT INTO Players(token, nickname, turn, game_id, card1, card2, funds, bet) VALUES($1, $2, $3, $4, $5, $6, $7, $8)' const createPlayerValues = [ @@ -47,7 +48,6 @@ router.get( null, null, ] - const createGameQuery = 'SELECT * FROM insert_with_random_key($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) ' const values = [ @@ -65,6 +65,7 @@ router.get( null, ] + // Create game await client.query(createPlayerQuery, createPlayerValues) await client.query(createGameQuery, values).then(async (result) => { await client diff --git a/src/routes/joinGame.ts b/src/routes/joinGame.ts index 4827d08..1e72e84 100644 --- a/src/routes/joinGame.ts +++ b/src/routes/joinGame.ts @@ -28,6 +28,7 @@ router.get( client .connect() .then(async () => { + // Define queries const checkIfGameExistsQuery = `SELECT game_master FROM Games g join Players p on g.game_id = p.game_id WHERE g.game_id = $1 and g.game_round = 0 @@ -53,6 +54,7 @@ router.get( 'SELECT nickname, token FROM Players WHERE game_id=$1' const getPlayersInRoomValues = [req.query.gameId] + // Check if player isn't already in the game const playerNotInGameResult = await client.query( checkIfPlayerNotInGameQuery, [req.query.playerToken] @@ -61,56 +63,58 @@ router.get( return res.sendStatus(400) } + // Check if game exists + const checkIfGameExistResult = await client.query( + checkIfGameExistsQuery, + gameCheckValues + ) + + if (checkIfGameExistResult.rowCount === 0) { + return res.sendStatus(401) + } + + // Prepare info for new player + const gameInfo: GameSettings = { + smallBlind: 0, + startingFunds: 0, + players: [], + gameMasterHash: sha256( + checkIfGameExistResult.rows[0].game_master + ).toString(), + } await client - .query(checkIfGameExistsQuery, gameCheckValues) - .then(async (result) => { - if (result.rowCount === 0) { - return res.sendStatus(401) - } else { - const gameInfo: GameSettings = { - smallBlind: 0, - startingFunds: 0, - players: [], - gameMasterHash: sha256(result.rows[0].game_master).toString(), - } - await client - .query(getGameInfoQuery, getGameInfoValues) - .then((result) => { - gameInfo.smallBlind = parseInt(result.rows[0].small_blind) - gameInfo.startingFunds = parseInt( - result.rows[0].starting_funds - ) - }) - await client - .query(getPlayersInRoomQuery, getPlayersInRoomValues) - .then((result) => { - const message = { - data: { - type: 'playerJoined', - // We know that the nickname will be defined - // because we checked it with celebrate. - nickname: req.query.nickname as string, - playerHash: sha256(req.query.playerToken).toString(), - }, - token: '', - } - result.rows.forEach(async (row) => { - gameInfo.players.push({ - nickname: row.nickname, - playerHash: sha256(row.token).toString(), - }) - // Sending firebase message to all players except the one - // who just joined. - if (row.token !== req.query.playerToken) { - message.token = row.token - await sendFirebaseMessage(message) - } - }) - }) - await client.query(createPlayerQuery, createPlayerValues) - res.send(gameInfo) - } + .query(getGameInfoQuery, getGameInfoValues) + .then((result) => { + gameInfo.smallBlind = parseInt(result.rows[0].small_blind) + gameInfo.startingFunds = parseInt(result.rows[0].starting_funds) + }) + + // Notify players about new player + const playersInRoomResult = await client.query( + getPlayersInRoomQuery, + getPlayersInRoomValues + ) + + const message = { + data: { + type: 'playerJoined', + // We know that the nickname will be defined + // because we checked it with celebrate. + nickname: req.query.nickname as string, + playerHash: sha256(req.query.playerToken).toString(), + }, + token: '', + } + playersInRoomResult.rows.forEach(async (row) => { + gameInfo.players.push({ + nickname: row.nickname, + playerHash: sha256(row.token).toString(), }) + message.token = row.token + await sendFirebaseMessage(message) + }) + await client.query(createPlayerQuery, createPlayerValues) + res.send(gameInfo) }) .catch((err) => { console.log(err.stack) diff --git a/src/routes/startGame.ts b/src/routes/startGame.ts index 3420d33..4e1afc0 100644 --- a/src/routes/startGame.ts +++ b/src/routes/startGame.ts @@ -42,7 +42,7 @@ router.get( const updatePlayerStateQuery = 'UPDATE Players SET turn=$1, card1=$2, card2=$3, funds=$4 WHERE token=$5' - // Check if the player is a master of not started game + // Check if the player is a master of a non-started game const getGameIdResult = await client.query(getGameIdQuery, [ req.query.creatorToken, ]) @@ -52,6 +52,7 @@ router.get( const gameId = getGameIdResult.rows[0].game_id const startingFunds = getGameIdResult.rows[0].starting_funds + // Get players const playersResult = await client.query(getPlayersQuery, [gameId]) const playersCount = playersResult.rowCount if (playersCount < 2) { @@ -67,6 +68,7 @@ router.get( }) } + // Deal out cards shuffleArray(playersInGame) const cardDeck = shuffleArray(fullCardDeck.slice()) @@ -106,6 +108,7 @@ router.get( ]) } + // Notify players about the game state const message = { data: { type: 'startGame',