import type { ExecutionContext } from "@codemation/core"; import type { AppConfig } from "../../presentation/config/AppConfig"; import type { PrismaDatabaseClient } from "../persistence/PrismaDatabaseClient"; import type { CollectionRegistry } from "./CollectionRegistry"; import { CollectionStoreRegistry } from "./CollectionStoreRegistry"; import { PostgresCollectionStoreFactory } from "./PostgresCollectionStoreFactory"; import { SqliteCollectionStoreFactory } from "./SqliteCollectionStoreFactory"; type CollectionStore = NonNullable[string]; export class CollectionStoreRegistryBuilderFactory { static create( appConfig: AppConfig, collectionRegistry: CollectionRegistry, prismaClient: PrismaDatabaseClient, ): CollectionStoreRegistry { const kind = appConfig.persistence.kind; if (kind === "none") { return new CollectionStoreRegistry(new Map()); } const storeFactory = kind === "postgresql" ? new PostgresCollectionStoreFactory(prismaClient) : new SqliteCollectionStoreFactory(prismaClient); const stores = new Map(); for (const definition of collectionRegistry.list()) { stores.set(definition.name, storeFactory.createStore(definition) as CollectionStore); } return new CollectionStoreRegistry(stores); } }