diff --git a/src/entities/InterchangeSystem.ts b/src/entities/InterchangeSystem.ts index 37aed58..af9faed 100644 --- a/src/entities/InterchangeSystem.ts +++ b/src/entities/InterchangeSystem.ts @@ -13,6 +13,7 @@ import { buildParkingRepositoryLoaderIfExists, ParkingRepositoryLoaderBuilderArguments } from "../loaders/parking/buildParkingRepositoryLoaderIfExists"; +import { RedisParkingRepository } from "../repositories/RedisParkingRepository"; export interface InterchangeSystemBuilderArguments { name: string; @@ -75,7 +76,7 @@ export class InterchangeSystem { ); notificationScheduler.startListeningForUpdates(); - let { parkingRepository, timedParkingLoader } = this.buildParkingLoaderAndRepository(args.parkingSystemId); + let { parkingRepository, timedParkingLoader } = await this.buildRedisParkingLoaderAndRepository(args.parkingSystemId); timedParkingLoader?.start(); return new InterchangeSystem( @@ -120,8 +121,8 @@ export class InterchangeSystem { ); notificationScheduler.startListeningForUpdates(); - let { parkingRepository, timedParkingLoader } = this.buildParkingLoaderAndRepository(args.parkingSystemId); - // Timed parking loader is not started + let { parkingRepository, timedParkingLoader } = this.buildInMemoryParkingLoaderAndRepository(args.parkingSystemId); + // Timed parking loader is not started here return new InterchangeSystem( args.name, @@ -135,7 +136,32 @@ export class InterchangeSystem { ); } - private static buildParkingLoaderAndRepository(id?: string) { + private static async buildRedisParkingLoaderAndRepository(id?: string) { + if (id === undefined) { + return { parkingRepository: null, timedParkingLoader: null }; + } + + let parkingRepository: RedisParkingRepository | null = new RedisParkingRepository(); + await parkingRepository.connect(); + + const loaderBuilderArguments: ParkingRepositoryLoaderBuilderArguments = { + id, + repository: parkingRepository, + }; + let parkingLoader = buildParkingRepositoryLoaderIfExists( + loaderBuilderArguments, + ); + + let timedParkingLoader = null; + if (parkingLoader == null) { + parkingRepository = null; + } else { + timedParkingLoader = new TimedApiBasedRepositoryLoader(parkingLoader); + } + return { parkingRepository, timedParkingLoader }; + } + + private static buildInMemoryParkingLoaderAndRepository(id?: string) { if (id === undefined) { return { parkingRepository: null, timedParkingLoader: null }; }