import { Query } from './query'; import { Entity } from '../domain/entity'; export interface IDatabase { list(query?: Query, _id_empresa?: string, sortBy?: keyof T, orderByDirection?: 'asc' | 'desc'): Promise | T[]>; find(query: Query): Promise | Array>; findOne(query: Query): Promise; findById(_id: string): Promise; findByIdPessoa(_id_pessoa: string): Promise; upsert(entity: T, query?: Query): Promise; insert(entity: T): Promise; remove(entity: T): Promise; } export interface ResultSet { rows: T[]; total: number; totalOffline?: number; page: number; limit: number; } export interface IDatabaseOptions { collection: string; mergeOnUpsert?: boolean; } export declare abstract class DatabaseOptions implements IDatabaseOptions { collection: string; mergeOnUpsert?: boolean; constructor(dbOptions: IDatabaseOptions & CustomDatabaseOptions); } export declare abstract class DatabaseImp, DbGenericInstance = {}, DbGenericModel = {}> implements IDatabase { protected dbInstance: DbGenericInstance; protected dbOptions: DatabaseOptions; protected fromJson: (doc: DbGenericModel) => T | Promise; protected toJson: (entity: T) => DbGenericModel; abstract list(query?: Query, _id_empresa?: string, sortBy?: keyof T, orderByDirection?: 'asc' | 'desc'): Promise | T[]>; abstract find(query: Query): Promise | T[]>; abstract findOne(query: Query): Promise; abstract findById(_id: string): Promise; abstract findByIdPessoa(_id_pessoa: string): Promise; abstract upsert(entity: T, query?: Query): Promise; abstract insert(entity: T): Promise; abstract remove(entity: T): Promise; constructor(dbInstance: DbGenericInstance, dbOptions: DatabaseOptions, fromJson: (doc: DbGenericModel) => T | Promise, toJson: (entity: T) => DbGenericModel); } export declare abstract class DatabaseService, K extends DatabaseImp, DbGenericInstance = {}, DbGenericModel = {}> { protected service: K; protected dbInstance: DbGenericInstance; protected dbOptions: DatabaseOptions; protected fromJson: (doc: DbGenericModel) => T | Promise; protected toJson: (entity: T) => DbGenericModel; constructor(service: K, dbInstance: DbGenericInstance, dbOptions: DatabaseOptions, fromJson: (doc: DbGenericModel) => T | Promise, toJson: (entity: T) => DbGenericModel); }