mancala/backend/src/game/gamestore/GameStoreImpl.ts

48 lines
1.6 KiB
TypeScript

import { GameStore } from "./GameStore";
import { BackendGame } from "../../models/Game";
export class GameStoreImpl implements GameStore {
gameStore: Map<string, BackendGame> = new Map<string, BackendGame>()
userGameMap: Map<string, string> = new Map<string, string>()
get(id: string): BackendGame | undefined {
return this.gameStore.get(id);
}
set(id: string, game: BackendGame): void {
this.gameStore.set(id, game);
}
remove(id: string): void {
this.gameStore.delete(id);
}
setGameIdByUser(userId: string, gameId: string): void {
this.userGameMap.set(userId, gameId)
}
getGameIdByUser(userId: string): string | undefined {
return this.userGameMap.get(userId);
}
removeGameIdByPlayer(userId: string): void {
this.userGameMap.delete(userId);
}
setGameByUser(userId: string, game: BackendGame): void {
this.setGameIdByUser(userId, game.id);
}
getGameByUser(userId: string): BackendGame | undefined {
const gameId = this.getGameIdByUser(userId);
return gameId && this.gameStore.get(gameId) || undefined;
}
removeGameByPlayer(userId: string): void {
this.removeGameIdByPlayer(userId);
}
getSpeactatingGameIdsByUser(userId: string): string[] {
const speactatingGameIds = [];
for (const gameId in this.gameStore.keys()) {
const game = this.gameStore.get(gameId) as BackendGame;
const isSpectator = game.spectatorIds.find((value) => value === userId);
isSpectator && speactatingGameIds.push(game.id);
}
return speactatingGameIds;
}
}