/** * Transaction-related type definitions */ import { IsolationLevel } from './enums'; /** * Options for creating a transaction */ export interface ITransactionOptions { /** Environment */ env: string; /** Product tag */ product: string; /** Database tag */ database: string; /** Transaction isolation level */ isolationLevel?: IsolationLevel | 'READ_UNCOMMITTED' | 'READ_COMMITTED' | 'REPEATABLE_READ' | 'SERIALIZABLE'; /** Mark transaction as read-only (optimization hint) */ readOnly?: boolean; /** Transaction timeout in milliseconds */ timeout?: number; /** Deferrable transaction (PostgreSQL only with SERIALIZABLE + readOnly) */ deferrable?: boolean; } /** * Transaction object for manual transaction control */ export interface ITransaction { /** Unique transaction ID */ id: string; /** Transaction status */ status: TransactionStatus; /** Commit the transaction */ commit(): Promise; /** Rollback the transaction */ rollback(): Promise; /** Check if transaction is still active */ isActive(): boolean; /** Create a savepoint */ savepoint(name: string): Promise; /** Native client/session (database-specific) */ client?: any; } /** * Transaction status */ export type TransactionStatus = 'active' | 'committed' | 'rolled_back' | 'error'; /** * Savepoint for partial rollback within a transaction */ export interface ISavepoint { /** Savepoint name */ name: string; /** Release the savepoint (mark as successful) */ release(): Promise; /** Rollback to this savepoint */ rollback(): Promise; } /** * Callback function for transaction execution */ export type ITransactionCallback = (transaction: ITransaction) => Promise; /** * Internal transaction context for tracking */ export interface ITransactionContext { /** Transaction ID */ id: string; /** Database type */ databaseType: string; /** Isolation level */ isolationLevel: IsolationLevel; /** Read-only flag */ readOnly: boolean; /** Timeout in milliseconds */ timeout?: number; /** Start timestamp */ startedAt: Date; /** Native client/session */ client: any; /** Active savepoints */ savepoints: Map; /** Transaction status */ status: TransactionStatus; }