timhaley94/holdem

View on GitHub
server/src/domain/purse/index.js

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
const { Schema } = require('mongoose');
const config = require('../../config');
const { Errors } = require('../../modules');

const DEFAULT_BANKROLL = config.game.defaultBankroll;

const schema = new Schema({
  bankroll: Number,
  wagered: Number,
  winnings: Number,
});

function create(bankroll = DEFAULT_BANKROLL) {
  return {
    bankroll,
    wagered: 0,
  };
}

function bet(purse, value) {
  if (value < 0) {
    throw new Errors.BadRequest('Cannot bet negative value');
  }

  return {
    ...purse,
    wagered: Math.min(
      purse.bankroll,
      purse.wagered + value,
    ),
  };
}

function allIn(purse) {
  return {
    ...purse,
    wagered: purse.bankroll,
  };
}

function win(purse, winnings) {
  return {
    ...purse,
    winnings,
  };
}

function isBankrupt({ bankroll }) {
  return bankroll <= 0;
}

function isAllIn({ wagered, bankroll }) {
  if (isBankrupt({ bankroll })) {
    return false;
  }

  return wagered >= bankroll;
}

function resolve({ bankroll, wagered, winnings }) {
  return bankroll - wagered + winnings;
}

module.exports = {
  DEFAULT_BANKROLL,
  schema,
  create,
  bet,
  allIn,
  win,
  isBankrupt,
  isAllIn,
  resolve,
};