import { Connection } from 'mongoose';
import * as factory from '../factory';
import TransactionModel from './mongoose/model/transaction';
/**
 * 取引リポジトリー
 */
export declare class MongoRepository {
    readonly transactionModel: typeof TransactionModel;
    constructor(connection: Connection);
    static CREATE_MONGO_CONDITIONS(params: factory.transaction.ISearchConditions<factory.transactionType>): any[];
    /**
     * 取引を開始する
     */
    start<T extends factory.transactionType>(params: factory.transaction.IStartParams<T>): Promise<factory.transaction.ITransaction<T>>;
    /**
     * IDで取引を取得する
     */
    findById<T extends factory.transactionType>(params: {
        typeOf: T;
        id: string;
    }): Promise<factory.transaction.ITransaction<T>>;
    /**
     * 進行中の取引を取得する
     */
    findInProgressById<T extends factory.transactionType>(params: {
        typeOf: T;
        id: string;
    }): Promise<factory.transaction.ITransaction<T>>;
    /**
     * 取引を確定する
     */
    confirm<T extends factory.transactionType>(params: {
        typeOf: T;
        id: string;
        result: factory.transaction.IResult<T>;
        potentialActions: factory.transaction.IPotentialActions<T>;
    }): Promise<factory.transaction.ITransaction<T>>;
    /**
     * タスク未エクスポートの取引をひとつ取得してエクスポートを開始する
     */
    startExportTasks<T extends factory.transactionType>(params: {
        typeOf: T;
        status: factory.transactionStatusType;
    }): Promise<factory.transaction.ITransaction<T> | null>;
    /**
     * タスクエクスポートリトライ
     * todo updatedAtを基準にしているが、タスクエクスポートトライ日時を持たせた方が安全か？
     */
    reexportTasks(params: {
        intervalInMinutes: number;
    }): Promise<void>;
    /**
     * set task status exported by transaction id
     * IDでタスクをエクスポート済に変更する
     */
    setTasksExportedById(params: {
        id: string;
    }): Promise<void>;
    /**
     * 取引を期限切れにする
     */
    makeExpired(): Promise<void>;
    /**
     * 取引を中止する
     */
    cancel<T extends factory.transactionType>(params: {
        typeOf: T;
        id: string;
    }): Promise<factory.transaction.ITransaction<T>>;
    count<T extends factory.transactionType>(params: factory.transaction.ISearchConditions<T>): Promise<number>;
    /**
     * 取引を検索する
     */
    search<T extends factory.transactionType>(params: factory.transaction.ISearchConditions<T>): Promise<factory.transaction.ITransaction<T>[]>;
}
