39 lines
1.2 KiB
TypeScript
39 lines
1.2 KiB
TypeScript
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; |