import type { CommonLogger } from '@naturalcycles/js-lib/log';
import type { BaseDBEntity, Unsaved } from '@naturalcycles/js-lib/types';
import type { DBTransaction } from '../db.model.js';
import type { AnyDao, CommonDao, InferID } from './common.dao.js';
import type { CommonDaoOptions, CommonDaoReadOptions, CommonDaoSaveBatchOptions, CommonDaoSaveOptions } from './common.dao.model.js';
/**
 * Transaction context.
 * Has similar API than CommonDao, but all operations are performed in the context of the transaction.
 */
export declare class CommonDaoTransaction {
    tx: DBTransaction;
    private logger;
    constructor(tx: DBTransaction, logger: CommonLogger);
    /**
     * Commits the underlying DBTransaction.
     * May throw.
     */
    commit(): Promise<void>;
    /**
     * Perform a graceful rollback without throwing/re-throwing any error.
     * Never throws.
     */
    rollback(): Promise<void>;
    getById<BM extends BaseDBEntity, DBM extends BaseDBEntity, ID extends string = BM['id']>(dao: CommonDao<BM, DBM, ID>, id?: ID | null, opt?: CommonDaoReadOptions): Promise<BM | null>;
    getByIds<BM extends BaseDBEntity, DBM extends BaseDBEntity, ID extends string = BM['id']>(dao: CommonDao<BM, DBM, ID>, ids: ID[], opt?: CommonDaoReadOptions): Promise<BM[]>;
    save<BM extends BaseDBEntity, DBM extends BaseDBEntity>(dao: CommonDao<BM, DBM>, bm: Unsaved<BM>, opt?: CommonDaoSaveOptions<BM, DBM>): Promise<BM>;
    saveBatch<BM extends BaseDBEntity, DBM extends BaseDBEntity>(dao: CommonDao<BM, DBM>, bms: Unsaved<BM>[], opt?: CommonDaoSaveBatchOptions<DBM>): Promise<BM[]>;
    /**
     * DaoTransaction.patch does not load from DB.
     * It assumes the bm was previously loaded in the same Transaction, hence could not be
     * concurrently modified. Hence it's safe to not sync with DB.
     *
     * So, this method is a rather simple convenience "Object.assign and then save".
     */
    patch<BM extends BaseDBEntity, DBM extends BaseDBEntity, ID extends string = BM['id']>(dao: CommonDao<BM, DBM, ID>, bm: BM, patch: Partial<BM>, opt?: CommonDaoSaveOptions<BM, DBM>): Promise<BM>;
    deleteById<DAO extends AnyDao>(dao: DAO, id?: InferID<DAO> | null, opt?: CommonDaoOptions): Promise<number>;
    deleteByIds<DAO extends AnyDao>(dao: DAO, ids: InferID<DAO>[], opt?: CommonDaoOptions): Promise<number>;
}
