import { types } from 'cassandra-driver'; export interface SaveOptions { ttl?: number; if_not_exist?: boolean; } export interface BaseModelStatic { new (props: T): BaseModel & T; syncDB(callback?: (err: Error | null, result: boolean) => void): void; findAsync( query: FindQuery, options: FindQueryOptions & { raw: true }, ): Promise; findAsync( query: FindQuery, options?: FindQueryOptions, ): Promise[]>; findOneAsync( query: FindQuery, options?: FindQueryOptions, ): Promise>; updateAsync( query: FindQuery, updateValue: Partial, options?: UpdateOptions, ): Promise; deleteAsync( query: FindQuery, options?: DeleteOptions, ): Promise; } export interface BaseModel extends BaseModelStatic { saveAsync(options?: SaveOptions): Promise; toJSON(): T; } export type FindQuery = { [KEY in keyof Entity]?: Entity[KEY] | CqlOperatorOptions; } & CqlPaginationOptions; export interface FindQueryOptions { select?: (string | keyof T)[]; materialized_view?: string; } export interface CqlPaginationOptions { $orderby?: { $asc?: keyof Entity | Array; $desc?: keyof Entity | Array; }; $limit?: number; } export interface CqlOperatorOptions { $eq?: T; $ne?: T; $isnt?: T; $gt?: T; $lt?: T; $gte?: T; $lte?: T; $in?: T[]; $like?: string; $token?: T; $contains?: string; $contains_key?: string[]; } export interface UpdateOptions { ttl?: number; if_exists?: boolean; conditions?: { [P in keyof T]?: T[P] }; } export interface DeleteOptions { if_exists?: boolean; }