import {RulesetSchema} from "../rulesets"; import {AccountStatsMongoData, OutcomeType, PlayerGameResults} from "./DefaultStatsMongoData"; import {UpdateError} from "../errors"; import StatsUpdater from "./StatsUpdater"; import Ruleset from "./Ruleset"; class AccountStats { private data: AccountStatsMongoData; private readonly updater: StatsUpdater; constructor(data: AccountStatsMongoData) { this.data = data; this.updater = new StatsUpdater(); this.updater.use(data); } use(data: AccountStatsMongoData) { this.data = data; this.updater.use(data); } updateStats(playerGameResults: (PlayerGameResults & {outcome: OutcomeType})[], ruleset: Ruleset): void { if (this.data) { for (const playerGameResult of playerGameResults) { this.updater.updateStats(playerGameResult, ruleset); } this.data.gamesPlayed += 1; } else { throw new UpdateError(`Cannot update without data! Call the use() method to hydrate the updater with data to analyse.`); } } getData(): AccountStatsMongoData { return this.data; } } export default AccountStats;