import type { Model, Schema } from "mongoose";
import type { IRole, IUser, IWorkspace } from "../entities";
import type { AppRequest, Ownership } from "../interfaces/SystemTypes";
import type { IQueryFilter, IQueryOptions, IQueryPagination } from "../interfaces/IQuery";
export declare const DEFAULT_PAGE_SIZE = 100;
export default class BaseService<T = any> {
    readonly model: Model<T>;
    /**
     * Current login user
     */
    user?: IUser;
    /**
     * Current active workspace
     */
    workspace?: IWorkspace;
    /**
     * Current owner & workspace
     */
    ownership?: Ownership;
    req?: AppRequest;
    constructor(schema: Schema, ownership?: Ownership);
    getActiveWorkspace(user: IUser): Promise<IWorkspace>;
    getActiveRole(user: IUser): Promise<IRole>;
    count(filter?: IQueryFilter<T>, options?: IQueryOptions): Promise<number>;
    create(data: any, options?: IQueryOptions): Promise<T>;
    find(filter?: IQueryFilter<T>, options?: IQueryOptions & IQueryPagination, pagination?: IQueryPagination): Promise<T[]>;
    findOne(filter?: IQueryFilter<T>, options?: IQueryOptions): Promise<T>;
    /**
     * Looking for unique "field" path of the documents in a collection
     * @param path - Document path (field) to be groupped
     */
    distinct(path: string, filter?: IQueryFilter<T>, options?: IQueryOptions & IQueryPagination, pagination?: IQueryPagination): Promise<any[]>;
    update(filter: IQueryFilter<T>, data: any, options?: IQueryOptions): Promise<T[]>;
    updateOne(filter: IQueryFilter<T>, data: any, options?: IQueryOptions): Promise<T>;
    softDelete(filter?: IQueryFilter<T>, options?: IQueryOptions): Promise<{
        ok: boolean;
        affected: number;
    }>;
    delete(filter?: IQueryFilter<T>, options?: IQueryOptions): Promise<{
        ok: boolean;
        affected: number;
    }>;
    empty(filter?: IQueryFilter<T>): Promise<{
        ok: number;
        n: number;
        error: string;
    } | {
        error: any;
        acknowledged: boolean;
        deletedCount: number;
        ok?: undefined;
        n?: undefined;
    }>;
}
export { BaseService };
//# sourceMappingURL=BaseService.d.ts.map