import Transaction from '../../Services/Transaction/Transaction.service'; import type { InMemoryCache } from '../../Memory/memory.operation'; /** * Tracks active in-flight Transaction objects keyed by connection ID and transaction ID. * One AxioDB singleton per process means one TransactionManager singleton too. * * Lifecycle: * 1. BEGIN_TRANSACTION -> create Transaction, store under (connectionId, transactionId) * 2. CRUD with transactionId -> retrieve Transaction, call insert/update/delete * 3. COMMIT / ROLLBACK -> call commit()/rollback(), remove from store * 4. Connection drop -> rollbackAllForConnection() cleans up orphaned transactions */ export default class TransactionManager { private static instance; private activeTransactions; private transactionPaths; private connectionCollections; private constructor(); static getInstance(): TransactionManager; beginTransaction(connectionId: string, collectionPath: string, cache: InMemoryCache): Transaction; getTransaction(connectionId: string, transactionId: string): Transaction | undefined; removeTransaction(connectionId: string, transactionId: string): void; getCollectionPath(transactionId: string): string | undefined; rollbackAllForConnection(connectionId: string): Promise; getActiveTransactionCount(): number; hasTransaction(connectionId: string, transactionId: string): boolean; }