import type { Connection, FilterQuery } from 'mongoose';
import * as factory from '../factory';
import { IProductModel } from './mongoose/schemas/productModel';
type IKeyOfProjection = keyof IProductModel | '_id';
type ISearchConditions = Pick<factory.product.ISearchConditions, 'id' | 'limit' | 'page' | 'project'> & {
    category?: {
        codeValue?: {
            $in?: string[];
        };
        inCodeSet?: {
            identifier?: {
                $eq?: string;
            };
        };
    };
};
/**
 * プロダクトモデルリポジトリ
 */
export declare class ProductModelRepo {
    private readonly productModelModel;
    constructor(connection: Connection);
    static CREATE_MONGO_CONDITIONS(params: ISearchConditions): FilterQuery<factory.product.IProduct>[];
    search(conditions: ISearchConditions, inclusion: IKeyOfProjection[], exclusion: IKeyOfProjection[]): Promise<IProductModel[]>;
    deleteById(params: {
        id: string;
    }): Promise<void>;
    /**
     * プロダクトを保管する
     */
    save(params: {
        /**
         * idを指定すれば更新
         */
        id?: string;
        $set: IProductModel;
    }): Promise<{
        id: string;
    }>;
    /**
     * 区分から同期する
     */
    upsertByCategory(params: {
        category: Pick<factory.categoryCode.ICategoryCode, 'codeValue' | 'inCodeSet' | 'name' | 'project'> & {
            id: string;
        };
    }): Promise<{
        id: string;
    }>;
    /**
     * 区分から削除する
     */
    deleteByCategory(params: {
        category: Pick<factory.categoryCode.ICategoryCode, 'project'> & {
            id: string;
        };
    }): Promise<void>;
    unsetUnnecessaryFields(params: {
        filter: any;
        $unset: any;
    }): Promise<import("mongoose").UpdateWriteOpResult>;
}
export {};
