import type { Connection } from 'mongoose';
import * as factory from '../factory';
export type IOwnershipInfoWithId = factory.ownershipInfo.IOwnershipInfo<factory.ownershipInfo.IGood> & {
    id: string;
};
/**
 * 所有権リポジトリ
 */
export declare class OwnershipInfoRepo {
    private readonly ownershipInfoModel;
    constructor(connection: Connection);
    static CREATE_MONGO_CONDITIONS(params: factory.ownershipInfo.ISearchConditions): any[];
    /**
     * なければ作成する
     */
    createIfNotExistByIdentifier(ownershipInfo: Omit<IOwnershipInfoWithId, 'id'>): Promise<{
        id: string;
    }>;
    projectFieldsById(params: {
        id: string;
    }, inclusion?: (keyof IOwnershipInfoWithId)[]): Promise<IOwnershipInfoWithId>;
    /**
     * 所有権を検索する
     */
    projectFields(params: factory.ownershipInfo.ISearchConditions, inclusion?: (keyof IOwnershipInfoWithId)[]): Promise<IOwnershipInfoWithId[]>;
    /**
     * 識別子から所有期限を変更する
     * 存在しない場合undefinedを返す
     */
    findByIdentifierAndUpdateOwnedThrough(params: {
        project: {
            id: string;
        };
        identifier: string;
        ownedThrough: Date;
    }): Promise<Pick<IOwnershipInfoWithId, 'id' | 'identifier'> | undefined>;
    /**
     * 所有者の所有権を全て削除する
     */
    deleteByOwnedById(params: {
        project: {
            id: string;
        };
        ownedBy: {
            id: string;
        };
    }): Promise<{
        deletedCount?: number;
    }>;
    /**
     * 特定所有者の特定所有権を削除する
     */
    deleteByIdAndOwnedById(params: {
        project: {
            id: string;
        };
        id: string;
        ownedBy: {
            id: string;
        };
    }): Promise<{
        deletedCount?: number;
    }>;
    /**
     * 識別子から所有期限切れの所有権を削除する
     */
    deleteExpiredByIdentifiers(params: {
        project: {
            id: string;
        };
        identifiers: string[];
        ownedThrough: {
            $lt: Date;
        };
    }): Promise<void>;
    getCursor(conditions: any, projection: any): import("mongoose").Cursor<import("mongoose").Document<unknown, {}, factory.ownershipInfo.IOwnershipInfo<factory.ownershipInfo.IGood> & {
        _id: string;
    }> & factory.ownershipInfo.IOwnershipInfo<factory.ownershipInfo.IGood> & {
        _id: string;
    } & Required<{
        _id: string;
    }>, import("mongoose").QueryOptions<import("mongoose").Document<unknown, {}, factory.ownershipInfo.IOwnershipInfo<factory.ownershipInfo.IGood> & {
        _id: string;
    }> & factory.ownershipInfo.IOwnershipInfo<factory.ownershipInfo.IGood> & {
        _id: string;
    } & Required<{
        _id: string;
    }>>>;
    /**
     * 所有者を追加する
     */
    addOwnerIfNotExist(params: {
        /**
         * 所有権ID
         */
        id: string;
        ownedBy: factory.ownershipInfo.IOwner;
    }): Promise<void>;
    /**
     * 所有者を削除する
     */
    removeOwnerIfExist(params: {
        /**
         * 所有権ID
         */
        id: string;
        ownedBy: {
            id: string;
        };
    }): Promise<void>;
    unsetUnnecessaryFields(params: {
        filter: any;
        $unset: any;
    }): Promise<import("mongoose").UpdateWriteOpResult>;
}
