/** * Cloud-agnostic datastore bridge for chronomind-backend. * * Wraps @bytelyst/datastore with ChronoMind container registry config. * Repositories import getCollection() from here instead of getContainer() from cosmos. * * Migration: Replace `import { getContainer } from '../../lib/cosmos.js'` * with `import { getCollection } from '../../lib/datastore.js'` */ import { type DatastoreProvider, type DocumentCollection, type BaseDocument, setDatastore, CosmosDatastoreProvider, MemoryDatastoreProvider, } from '@bytelyst/datastore'; import { config } from './config.js'; let _provider: DatastoreProvider | null = null; /** * Initialize the datastore provider. * Call once at service startup (before any repository calls). */ export function initDatastore(): DatastoreProvider { if (_provider) return _provider; if (config.DB_PROVIDER === 'memory') { _provider = new MemoryDatastoreProvider(); } else { _provider = new CosmosDatastoreProvider(); } setDatastore(_provider); return _provider; } /** * Inject a provider directly (for testing). */ export function setProvider(provider: DatastoreProvider): void { _provider = provider; setDatastore(provider); } /** * Get a typed collection from the datastore. * Drop-in replacement for getContainer() — returns a DocumentCollection instead of a Cosmos Container. */ export function getCollection( name: string, partitionKeyPath: string = '/productId' ): DocumentCollection { if (!_provider) { initDatastore(); } return _provider!.getCollection(name, partitionKeyPath); } /** * @internal — for testing only */ export function _resetDatastoreProvider(): void { _provider = null; }