/** * In-memory implementation of IRaceEventRepository for development/testing. */ import type { IRaceEventRepository } from '../../domain/repositories/IRaceEventRepository'; import type { RaceEvent } from '../../domain/entities/RaceEvent'; export class InMemoryRaceEventRepository implements IRaceEventRepository { private raceEvents: Map = new Map(); async findById(id: string): Promise { return this.raceEvents.get(id) ?? null; } async findAll(): Promise { return Array.from(this.raceEvents.values()); } async findBySeasonId(seasonId: string): Promise { return Array.from(this.raceEvents.values()).filter( raceEvent => raceEvent.seasonId === seasonId ); } async findByLeagueId(leagueId: string): Promise { return Array.from(this.raceEvents.values()).filter( raceEvent => raceEvent.leagueId === leagueId ); } async findByStatus(status: string): Promise { return Array.from(this.raceEvents.values()).filter( raceEvent => raceEvent.status === status ); } async findAwaitingStewardingClose(): Promise { const now = new Date(); return Array.from(this.raceEvents.values()).filter( raceEvent => raceEvent.status === 'awaiting_stewarding' && raceEvent.stewardingClosesAt && raceEvent.stewardingClosesAt <= now ); } async create(raceEvent: RaceEvent): Promise { this.raceEvents.set(raceEvent.id, raceEvent); return raceEvent; } async update(raceEvent: RaceEvent): Promise { this.raceEvents.set(raceEvent.id, raceEvent); return raceEvent; } async delete(id: string): Promise { this.raceEvents.delete(id); } async exists(id: string): Promise { return this.raceEvents.has(id); } // Test helper methods clear(): void { this.raceEvents.clear(); } getAll(): RaceEvent[] { return Array.from(this.raceEvents.values()); } }