import { DataObject } from '../data'; import { DataFrame } from '../data/DataFrame'; import { DataService } from './DataService'; import { DataServiceDriver } from './DataServiceDriver'; import { FindOptions } from './FindOptions'; /** * The data frame service manages storage of complete data frames. */ export class DataFrameService extends DataService { constructor(dataServiceDriver?: DataServiceDriver) { super(dataServiceDriver); } /** * Insert a new data frame * @param {DataFrame} frame Data frame to insert * @returns {DataFrame} Inserted frame */ public insertFrame(frame: T): Promise { return this.insert(frame.uid, frame); } /** * Find data frames created before a certain timestamp * @param {number} timestamp Timestamp * @param {FindOptions} [options] Find options * @returns {DataFrame[]} Array of data frames before the specified timestamp */ public findBefore(timestamp: number, options?: FindOptions): Promise { return this._findTimestamp({ $lte: timestamp }, options); } /** * Find data frames created after a certain timestamp * @param {number} timestamp Timestamp * @param {FindOptions} [options] Find options * @returns {DataFrame[]} Array of data frames after the specified timestamp */ public findAfter(timestamp: number, options?: FindOptions): Promise { return this._findTimestamp({ $gte: timestamp }, options); } /** * Find data frames by data object * @param {DataObject | string} dataObject Data object to get frames for * @param {FindOptions} [options] Find options. By default sorted by createdTimestamp in descending order * @returns {DataFrame[]} Array of data frames that contain the specified object */ public findByDataObject(dataObject: DataObject | string, options?: FindOptions): Promise { return this.findAll( { objects: { $elemMatch: { uid: dataObject instanceof DataObject ? dataObject.uid : dataObject, }, }, }, options || { sort: [['createdTimestamp', -1]], }, ); } private _findTimestamp(timestampFilter: any, options?: FindOptions): Promise { return this.findAll( { createdTimestamp: timestampFilter, }, options, ) as Promise; } }