/// /// Copyright © 2016-2020 The Thingsboard Authors /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. /// You may obtain a copy of the License at /// /// http://www.apache.org/licenses/LICENSE-2.0 /// /// Unless required by applicable law or agreed to in writing, software /// distributed under the License is distributed on an "AS IS" BASIS, /// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. /// See the License for the specific language governing permissions and /// limitations under the License. /// import { AliasFilterType, EntityFilters } from '@shared/models/alias.models'; import { EntityId } from '@shared/models/id/entity-id'; export enum EntityKeyType { ATTRIBUTE = 'ATTRIBUTE', CLIENT_ATTRIBUTE = 'CLIENT_ATTRIBUTE', SHARED_ATTRIBUTE = 'SHARED_ATTRIBUTE', SERVER_ATTRIBUTE = 'SERVER_ATTRIBUTE', TIME_SERIES = 'TIME_SERIES', ENTITY_FIELD = 'ENTITY_FIELD' } export interface EntityKey { type: EntityKeyType; key: string; } export enum FilterPredicateType { STRING = 'STRING', NUMERIC = 'NUMERIC', BOOLEAN = 'BOOLEAN', COMPLEX = 'COMPLEX' } export enum StringOperation { EQUAL = 'EQUAL', NOT_EQUAL = 'NOT_EQUAL', STARTS_WITH = 'STARTS_WITH', ENDS_WITH = 'ENDS_WITH', CONTAINS = 'CONTAINS', NOT_CONTAIN = 'NOT_CONTAIN' } export enum NumericOperation { EQUAL = 'EQUAL', NOT_EQUAL = 'NOT_EQUAL', GREATER = 'GREATER', LESS = 'LESS', GREATER_OR_EQUAL = 'GREATER_OR_EQUAL', LESS_OR_EQUAL = 'LESS_OR_EQUAL' } export enum BooleanOperation { EQUAL = 'EQUAL', NOT_EQUAL = 'NOT_EQUAL' } export enum ComplexOperation { AND = 'AND', OR = 'OR' } export interface StringFilterPredicate { operation: StringOperation; value: string; ignoreCase: boolean; } export interface NumericFilterPredicate { operation: NumericOperation; value: number; } export interface BooleanFilterPredicate { operation: BooleanOperation; value: boolean; } export interface ComplexFilterPredicate { operation: ComplexOperation; predicates: Array; } export type KeyFilterPredicates = StringFilterPredicate & NumericFilterPredicate & BooleanFilterPredicate & ComplexFilterPredicate; export interface KeyFilterPredicate extends KeyFilterPredicates { type?: FilterPredicateType; } export interface KeyFilter { key: EntityKey; predicate: KeyFilterPredicate; } export interface EntityFilter extends EntityFilters { type?: AliasFilterType; } export enum Direction { ASC = 'ASC', DESC = 'DESC' } export interface EntityDataSortOrder { key: EntityKey; direction: Direction; } export interface EntityDataPageLink { pageSize: number; page: number; textSearch?: string; sortOrder?: EntityDataSortOrder; } export const defaultEntityDataPageLink: EntityDataPageLink = { pageSize: 1024, page: 0, sortOrder: { key: { type: EntityKeyType.ENTITY_FIELD, key: 'createdTime' }, direction: Direction.DESC } } export interface EntityCountQuery { entityFilter: EntityFilter; } export interface EntityDataQuery extends EntityCountQuery { pageLink: EntityDataPageLink; entityFields?: Array; latestValues?: Array; keyFilters?: Array; } export interface TsValue { ts: number; value: string; } export interface EntityData { entityId: EntityId; latest: {[entityKeyType: string]: {[key: string]: TsValue}}; timeseries: {[key: string]: Array}; }