/** * Repositories Index * Export all repository classes for easy importing */ export { BaseRepository } from './base'; export { ProvidersRepository } from './providers'; export { RegionsRepository } from './regions'; export { InstancesRepository } from './instances'; export { PricingRepository } from './pricing'; export { GpuInstancesRepository } from './gpu-instances'; export { GpuPricingRepository } from './gpu-pricing'; export { G8InstancesRepository } from './g8-instances'; export { G8PricingRepository } from './g8-pricing'; export { VpuInstancesRepository } from './vpu-instances'; export { VpuPricingRepository } from './vpu-pricing'; import { ProvidersRepository } from './providers'; import { RegionsRepository } from './regions'; import { InstancesRepository } from './instances'; import { PricingRepository } from './pricing'; import { GpuInstancesRepository } from './gpu-instances'; import { GpuPricingRepository } from './gpu-pricing'; import { G8InstancesRepository } from './g8-instances'; import { G8PricingRepository } from './g8-pricing'; import { VpuInstancesRepository } from './vpu-instances'; import { VpuPricingRepository } from './vpu-pricing'; import type { Env } from '../types'; /** * Repository factory for creating repository instances * Uses lazy singleton pattern to cache repository instances */ export class RepositoryFactory { private _providers?: ProvidersRepository; private _regions?: RegionsRepository; private _instances?: InstancesRepository; private _pricing?: PricingRepository; private _gpuInstances?: GpuInstancesRepository; private _gpuPricing?: GpuPricingRepository; private _g8Instances?: G8InstancesRepository; private _g8Pricing?: G8PricingRepository; private _vpuInstances?: VpuInstancesRepository; private _vpuPricing?: VpuPricingRepository; constructor(private _db: D1Database, private _env?: Env) {} /** * Access to raw D1 database instance for advanced operations (e.g., batch queries) */ get db(): D1Database { return this._db; } /** * Access to environment variables for KRW pricing configuration */ get env(): Env | undefined { return this._env; } get providers(): ProvidersRepository { return this._providers ??= new ProvidersRepository(this.db); } get regions(): RegionsRepository { return this._regions ??= new RegionsRepository(this.db); } get instances(): InstancesRepository { return this._instances ??= new InstancesRepository(this.db); } get pricing(): PricingRepository { return this._pricing ??= new PricingRepository(this.db, this._env); } get gpuInstances(): GpuInstancesRepository { return this._gpuInstances ??= new GpuInstancesRepository(this.db); } get gpuPricing(): GpuPricingRepository { return this._gpuPricing ??= new GpuPricingRepository(this.db, this._env); } get g8Instances(): G8InstancesRepository { return this._g8Instances ??= new G8InstancesRepository(this.db); } get g8Pricing(): G8PricingRepository { return this._g8Pricing ??= new G8PricingRepository(this.db, this._env); } get vpuInstances(): VpuInstancesRepository { return this._vpuInstances ??= new VpuInstancesRepository(this.db); } get vpuPricing(): VpuPricingRepository { return this._vpuPricing ??= new VpuPricingRepository(this.db, this._env); } }