import { Model as Base } from 'javascript-model'; import { CommonOptions, FilterQuery, FindOneOptions } from 'mongodb'; import { ValidationResult } from './validator'; /** * Delete options */ export interface DeleteOptions extends CommonOptions { } /** * Populate options */ export interface PopulateOptions { findOptions?: FindOneOptions; path: string; populate?: Array; } /** * Reload options */ export interface ReloadOptions { findOptions?: FindOneOptions; populate?: Array; } /** * Save options */ export interface SaveOptions { depth?: number; } /** * Validate options */ export interface ValidateOptions { depth?: number; } /** * Model */ export default class Model extends Base { /** * Override constructor */ constructor(data?: any); /** * Create Model and save to database * @return Promise */ static create(data: any, options?: SaveOptions): Promise; /** * Find document */ static find(query?: FilterQuery, options?: FindOneOptions, reloadOptions?: ReloadOptions): Promise; /** * Delete one */ delete(options?: DeleteOptions): Promise; /** * Override load */ load(data?: any): this; /** * Reload data * @param Reload options * @return Promise with model */ reload(options?: ReloadOptions): Promise; /** * Save data * @param Save options * @return Promise with saved model */ save(options?: SaveOptions): Promise; /** * Validate * @return Always return a resolved array of ValidationResult * Rejected values are critical errors */ validate(options?: ValidateOptions): Promise>; }