mirror of
https://github.com/brendan-ch/project-inter-server.git
synced 2026-04-17 07:50:31 +00:00
44 lines
1.7 KiB
TypeScript
44 lines
1.7 KiB
TypeScript
import { ShuttleRepositoryLoader } from "../loaders/ShuttleRepositoryLoader";
|
|
import { ETANotificationScheduler } from "../notifications/schedulers/ETANotificationScheduler";
|
|
import { TimedApiBasedShuttleRepositoryLoader } from "../loaders/TimedApiBasedShuttleRepositoryLoader";
|
|
import { UnoptimizedInMemoryShuttleRepository } from "../repositories/UnoptimizedInMemoryShuttleRepository";
|
|
import { RedisNotificationRepository } from "../repositories/RedisNotificationRepository";
|
|
import { NotificationRepository } from "../repositories/NotificationRepository";
|
|
import { ShuttleGetterSetterRepository } from "../repositories/ShuttleGetterSetterRepository";
|
|
|
|
export class System {
|
|
constructor(
|
|
public systemId: string,
|
|
public shuttleDataLoader: ShuttleRepositoryLoader,
|
|
public shuttleRepository: ShuttleGetterSetterRepository,
|
|
public notificationScheduler: ETANotificationScheduler,
|
|
public notificationRepository: NotificationRepository,
|
|
) {
|
|
}
|
|
|
|
/**
|
|
* Construct an instance of the class where all composited
|
|
* classes are correctly linked.
|
|
* @param systemId
|
|
* @param notificationRepository
|
|
*/
|
|
static build(
|
|
systemId: string,
|
|
notificationRepository: NotificationRepository = new RedisNotificationRepository()
|
|
) {
|
|
const shuttleRepository = new UnoptimizedInMemoryShuttleRepository();
|
|
const shuttleDataLoader = new TimedApiBasedShuttleRepositoryLoader(systemId, shuttleRepository);
|
|
|
|
const notificationScheduler = new ETANotificationScheduler(shuttleRepository, notificationRepository);
|
|
|
|
const system = new System(
|
|
systemId,
|
|
shuttleDataLoader,
|
|
shuttleRepository,
|
|
notificationScheduler,
|
|
notificationRepository,
|
|
);
|
|
return system;
|
|
}
|
|
}
|