import { IGameRepository } from '@core/racing/domain/repositories/IGameRepository'; import { Game } from '@core/racing/domain/entities/Game'; import { Logger } from '@core/shared/application'; export class InMemoryGameRepository implements IGameRepository { private games: Map = new Map(); constructor(private readonly logger: Logger) { this.logger.info('InMemoryGameRepository initialized.'); this.seedDefaults(); } private seedDefaults(): void { const defaults = [ Game.create({ id: 'iracing', name: 'iRacing' }), Game.create({ id: 'acc', name: 'Assetto Corsa Competizione' }), Game.create({ id: 'f1-24', name: 'F1 24' }), Game.create({ id: 'f1-23', name: 'F1 23' }), ]; for (const game of defaults) { this.games.set(game.id.toString(), game); } } async findById(id: string): Promise { this.logger.debug(`[InMemoryGameRepository] Finding game by ID: ${id}`); const game = this.games.get(id) ?? null; if (game) { this.logger.info(`Found game by ID: ${id}.`); } else { this.logger.warn(`Game with ID ${id} not found.`); } return Promise.resolve(game); } async findAll(): Promise { this.logger.debug('[InMemoryGameRepository] Finding all games.'); return Promise.resolve(Array.from(this.games.values())); } }