lemon-core
Version:
Lemon Serverless Micro-Service Platform
81 lines (80 loc) • 2.36 kB
TypeScript
import { GeneralItem } from 'lemon-model';
import { CosmosOption } from './cosmos-service';
/**
* ComparisonCondition - arithmetic comparison (EQ, NE, LE, LT, GE, GT)
* NOTE: '!=' is shortcut to { not: { comparator: '=' } }
*/
type Condition = ComparisonCondition | BetweenCondition | ExistenceCondition | StringCondition;
interface ComparisonCondition {
key: string;
comparator: '=' | '!=' | '<=' | '<' | '>=' | '>';
value: number | string;
}
interface BetweenCondition {
key: string;
from: number | string;
to: number | string;
}
interface ExistenceCondition {
key: string;
exists: boolean;
}
interface StringCondition {
key: string;
operator: 'begins_with' | 'contains';
value: string;
}
export type CosmosQueryFilter = (Condition | {
not: Condition;
}) | CosmosQueryFilter[] | {
or: CosmosQueryFilter[];
};
/**
* class: CosmosQueryResult
* - result information of scan.
*/
export interface CosmosQueryResult<T> {
list: T[];
total?: number;
last?: any;
}
/**
* feature: `CosmosScannable`
* - simple scan capable class.
*/
export interface CosmosScannable<T extends GeneralItem> {
/**
* simple scan w/ limit.
* @param limit limit of page
* @param last last result on previous page using continuation token
* @param conditions
*/
scan(limit?: number, last?: any, conditions?: CosmosQueryFilter): Promise<CosmosQueryResult<T>>;
}
export declare class QueryBuilder {
buildConditionExpression(condition: Condition): Promise<string>;
buildQueryByConditions(conditions: CosmosQueryFilter): Promise<string>;
}
export declare class QueryService {
protected options: CosmosOption;
constructor(options: CosmosOption);
queryItems(query: string, limit?: number, last?: any): Promise<{
queryResult: any[];
continuationToken?: any;
}>;
}
export declare class CosmosQueryService<T extends GeneralItem> implements CosmosScannable<T> {
protected options: CosmosOption;
private queryService;
private queryBuilder;
constructor(options: CosmosOption);
/**
* say hello of identity.
*/
hello: () => string;
/**
* Read items by conditions using dynamic query
*/
scan(limit?: number, last?: any, conditions?: CosmosQueryFilter): Promise<CosmosQueryResult<T>>;
}
export {};