import { Model, AjvValidator, ColumnRefOrOrderByDescriptor, Transaction, PartialModelObject } from 'objection';
export type QueryResult<T> = {
    result: T[];
    totalCount: number;
};
export type FindOptions = {
    trx?: Transaction;
    related?: string | string[];
    orderBy?: ColumnRefOrOrderByDescriptor[];
    page?: number;
    pageSize?: number;
};
export type TrxOption = {
    trx?: Transaction;
};
export type TrxAndRelatedOptions = {
    trx?: Transaction;
    related?: string | string[];
};
declare class BaseModel extends Model {
    id: string;
    created: string;
    updated: string;
    type: string;
    static createValidator(): AjvValidator;
    static get jsonSchema(): object;
    $beforeInsert(): void;
    $beforeUpdate(): void;
    static find<T extends BaseModel>(this: new () => T, data: PartialModelObject<T>, options?: FindOptions): Promise<QueryResult<T>>;
    static findByIds<T extends BaseModel>(this: new () => T, ids: string[], options?: TrxAndRelatedOptions): Promise<T[]>;
    static findById<T extends BaseModel>(this: new () => T, id: string, options?: TrxAndRelatedOptions): Promise<T>;
    static findOne<T extends BaseModel>(this: new () => T, data: PartialModelObject<T>, options?: TrxAndRelatedOptions): Promise<T>;
    static insert<T extends BaseModel>(this: new () => T, data: PartialModelObject<T>, options?: TrxAndRelatedOptions): Promise<T>;
    static insert<T extends BaseModel>(this: new () => T, data: PartialModelObject<T>[], options?: TrxAndRelatedOptions): Promise<T[]>;
    patch(data: PartialModelObject<this>, options?: TrxOption): Promise<this>;
    static patchAndFetchById<T extends BaseModel>(this: new () => T, id: string, data: PartialModelObject<T>, options?: TrxAndRelatedOptions): Promise<T>;
    update(data: PartialModelObject<this>, options?: TrxOption): Promise<this>;
    static updateAndFetchById<T extends BaseModel>(this: new () => T, id: string, data: PartialModelObject<T>, options?: TrxAndRelatedOptions): Promise<T>;
    static deleteById<T extends BaseModel>(this: new () => T, id: string, options?: TrxOption): Promise<number>;
    static deleteByIds<T extends BaseModel>(this: new () => T, ids: string[], options?: TrxOption): Promise<number>;
}
export default BaseModel;
//# sourceMappingURL=base.model.d.ts.map