///
import { ICatalystGResponse, ICatalystJSON } from '../utils/pojo/common';
import { NoSQLByte } from './byte';
import { AttribType, DataType, NoSQLConditionGroupOperator, NoSQLCrudOperation, NoSQLOperator, NoSQLReturnValue, NoSQLUpdateOperationType } from './enum';
import { NoSQLItem } from './item';
import { NoSQLByteSet, NoSQLNumberSet, NoSQLStringSet } from './set';
export interface INoSQLBase extends ICatalystGResponse {
id: string;
name: string;
partition_key: INoSQLKeyColumn;
sort_key?: INoSQLKeyColumn;
type?: string;
status: 'CREATING' | 'ONLINE' | 'OFFLINE' | 'DELETED';
metrics?: Record;
}
export interface INoSQLKeyColumn {
column_name: string;
data_type: string | DataType;
}
export interface INoSQLTable extends INoSQLBase {
ttl_enabled: boolean;
api_access?: boolean;
ttl_attribute?: string;
additional_sort_keys: Array;
local_index?: Array;
global_index: Array;
}
export interface INoSQLIndex extends INoSQLBase {
id: string;
name: string;
projected_attributes: IProjectedAttributes;
}
export interface IProjectedAttributes {
type: string | AttribType;
include_columns?: Set;
}
export type TNoSQLByte = Buffer | Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array;
export type TNoSQLValues = null | boolean | string | TNoSQLByte | number | bigint | Set | NoSQLStringSet | Set | NoSQLNumberSet | Set | NoSQLByteSet | Array | {
[key: string]: TNoSQLValues;
} | Map;
export type TNoSQLAttribute = Partial<{
[DataType.NULL]: boolean;
[DataType.S]: string;
[DataType.B]: NoSQLByte;
[DataType.BOOL]: string;
[DataType.N]: string;
[DataType.SS]: NoSQLStringSet;
[DataType.SN]: NoSQLNumberSet;
[DataType.SB]: NoSQLByteSet;
[DataType.L]: Array;
[DataType.M]: TNoSQLItem;
}>;
export type TNoSQLAttributeResponse = Partial<{
[DataType.NULL]: boolean;
[DataType.S]: string;
[DataType.B]: string;
[DataType.BOOL]: string;
[DataType.N]: string;
[DataType.SS]: Array;
[DataType.SN]: Array;
[DataType.SB]: Array;
[DataType.L]: Array;
[DataType.M]: Record;
}>;
export type TNoSQLItem = Record;
export interface INoSQLConditionFunction {
function_name: 'attribute_exists' | 'attribute_type';
args: Array<{
attribute_path: Array | string;
} | {
[DataType.S]: string;
}>;
}
export interface INoSQLUpdateAttributeFunction {
function_name: 'add' | 'append_list' | 'if_not_exists' | 'subtract';
args: Array<{
attribute_path: Array;
} | TNoSQLAttribute>;
}
export interface INoSQLCondition {
function?: INoSQLConditionFunction;
attribute?: string | Array;
operator?: NoSQLOperator;
value?: TNoSQLAttribute;
group_operator?: NoSQLConditionGroupOperator;
group?: Array;
negate?: boolean;
}
export interface NoSQLUpdateAttributeOperation {
operation_type: NoSQLUpdateOperationType | string;
attribute_path: Array;
update_value?: TNoSQLAttribute;
update_function?: INoSQLUpdateAttributeFunction;
}
export interface INoSQLData {
status: string;
old_item?: TNoSQLItem;
item?: TNoSQLItem;
}
export interface INoSQLResponse {
size: number;
get: Array;
update: Array;
delete: Array;
create: Array;
start_key: TNoSQLItem;
operation: NoSQLCrudOperation;
}
export interface INoSQLInsertItem extends ICatalystJSON {
item: NoSQLItem | TNoSQLItem;
return?: NoSQLReturnValue;
condition?: INoSQLCondition;
}
export interface INoSQLUpdateItem extends ICatalystJSON {
keys: NoSQLItem | TNoSQLItem;
return?: NoSQLReturnValue;
condition?: INoSQLCondition;
update_attributes: Array;
}
export interface INoSQLDeleteItem extends ICatalystJSON {
keys: NoSQLItem | TNoSQLItem;
return?: NoSQLReturnValue;
condition?: INoSQLCondition;
}
export interface INoSQLFetchItem extends ICatalystJSON {
keys: Array | NoSQLItem | TNoSQLItem;
consistent_read?: boolean;
required_attributes?: Array>;
}
export interface INoSQLQuery extends ICatalystJSON {
key_condition: INoSQLCondition;
forward_scan?: boolean;
limit?: number;
required_attributes?: Array>;
other_condition?: INoSQLCondition;
start_key?: NoSQLItem | TNoSQLItem;
consistent_read?: boolean;
additional_sort_key?: string;
}