/** * Infrastructure Adapter: InMemoryMediaRepository * * In-memory implementation of IMediaRepository. * Stores URLs for media assets like avatars and logos. */ import type { MediaRepository } from '@core/racing/domain/repositories/MediaRepository'; import type { Logger } from '@core/shared/domain/Logger'; export class InMemoryMediaRepository implements MediaRepository { private driverAvatars = new Map(); private teamLogos = new Map(); private leagueLogos = new Map(); private leagueCovers = new Map(); constructor(private readonly logger: Logger) { this.logger.info('[InMemoryMediaRepository] Initialized.'); } async getDriverAvatar(driverId: string): Promise { return this.driverAvatars.get(driverId) ?? null; } async getTeamLogo(teamId: string): Promise { return this.teamLogos.get(teamId) ?? null; } async getLeagueLogo(leagueId: string): Promise { return this.leagueLogos.get(leagueId) ?? null; } async getLeagueCover(leagueId: string): Promise { return this.leagueCovers.get(leagueId) ?? null; } // Helper methods for seeding setDriverAvatar(driverId: string, url: string): void { this.driverAvatars.set(driverId, url); } setTeamLogo(teamId: string, url: string): void { this.teamLogos.set(teamId, url); } setLeagueLogo(leagueId: string, url: string): void { this.leagueLogos.set(leagueId, url); } setLeagueCover(leagueId: string, url: string): void { this.leagueCovers.set(leagueId, url); } async clear(): Promise { this.driverAvatars.clear(); this.teamLogos.clear(); this.leagueLogos.clear(); this.leagueCovers.clear(); } }