import type { Connection, FilterQuery } from 'mongoose';
import * as factory from '../factory';
type IKeyOfProjection = keyof factory.iam.IMember;
export type ICustomerMember = Pick<factory.iam.IMemberOfRole, 'hasRole' | 'id' | 'name' | 'memberOf'>;
/**
 * IAMメンバーリポジトリ
 */
export declare class MemberRepo {
    private readonly memberModel;
    constructor(connection: Connection);
    static CREATE_MONGO_CONDITIONS(params: factory.iam.ISearchConditions): FilterQuery<factory.iam.IMember>[];
    /**
     * プロジェクト指定で検索する
     */
    projectFieldsByProjectId(project: {
        id: string;
    }, conditions: Omit<factory.iam.ISearchConditions, 'project'>, inclusion: IKeyOfProjection[]): Promise<factory.iam.IMember[]>;
    /**
     * 注文取引クライアントメンバーを検索する
     * 全プロジェクトで利用可能なクライアントも考慮される
     */
    searchCustomerMembers(params: Pick<factory.iam.ISearchConditions, 'sort'> & {
        limit: number;
        page: number;
        project: {
            id: string;
        };
        member?: {
            id?: {
                $eq?: string;
                $in?: string[];
            };
            name?: {
                $regex?: string;
            };
        };
    }): Promise<{
        member: ICustomerMember;
    }[]>;
    aggregateRoleNames(params: {
        project: {
            id: {
                $eq: string;
            };
        };
        member: {
            id: {
                $eq: string;
            };
            memberOf: {
                id: {
                    $eq: string;
                };
                typeOf: {
                    $eq: factory.organizationType.Corporation | factory.organizationType.Project;
                };
            };
        };
    }): Promise<{
        roleName: string;
    }[]>;
    deleteByProject(params: {
        project: {
            id: string;
        };
    }): Promise<void>;
    /**
     * メンバー作成
     */
    create(params: factory.iam.IMember[]): Promise<void>;
    /**
     * メンバー更新
     */
    updateByMemberId(params: {
        project: {
            id: string;
        };
        member: {
            id: string;
            memberOf: {
                id: string;
                typeOf: factory.organizationType.Corporation | factory.organizationType.Project;
            };
            hasRole?: factory.iam.IMemberRole[];
            image?: string;
            name?: string;
        };
        $unset: {
            'member.member'?: 1;
        };
    }): Promise<void>;
    /**
     * メンバー削除
     */
    deleteByMemberId(params: {
        project: {
            id: string;
        };
        member: {
            id: string;
            memberOf: {
                id: {
                    $eq: string;
                };
                typeOf: {
                    $eq: factory.organizationType.Corporation | factory.organizationType.Project;
                };
            };
        };
    }): Promise<void>;
    deleteManyByMemberOfId(params: {
        project: {
            id: string;
        };
        member: {
            memberOf: {
                id: {
                    $eq: string;
                };
                typeOf: {
                    $eq: factory.organizationType.Corporation | factory.organizationType.Project;
                };
            };
        };
    }): Promise<import("mongodb").DeleteResult>;
    /**
     * メンバーの権限を持つプロジェクト検索
     */
    searchProjectIdsByMemberId(params: {
        member: {
            id: string;
        };
        project?: {
            id?: {
                $eq?: string;
                $regex?: string;
            };
        };
        limit: number;
        page: number;
    }): Promise<string[]>;
    /**
     * member.memberOf.typeOfからmember.memberOf.idのリストを検索する
     * 権限を持つ販売者IDの検索など
     */
    searchMemberOfIdsByMemberId(params: {
        member: {
            id: string;
            memberOf: {
                typeOf: factory.organizationType.Corporation | factory.organizationType.Project;
            };
        };
        project: {
            id: string;
        };
    }): Promise<string[]>;
    getCursor(conditions: any, projection: any): import("mongoose").Cursor<import("mongoose").Document<unknown, {}, factory.iam.IMember> & factory.iam.IMember & {
        _id: import("mongoose").Types.ObjectId;
    }, import("mongoose").QueryOptions<import("mongoose").Document<unknown, {}, factory.iam.IMember> & factory.iam.IMember & {
        _id: import("mongoose").Types.ObjectId;
    }>>;
    unsetUnnecessaryFields(params: {
        filter: any;
        $unset: any;
    }): Promise<import("mongoose").UpdateWriteOpResult>;
    private projectFields;
}
export {};
