amocrm-client
Version:
JS Library for AmoCRM
131 lines (110 loc) • 4.05 kB
text/typescript
import { IClientRequest } from "../common/ClientRequest";
import { JSONObject, TConstructor } from "../types";
import { IntRange, IRequestOptions, Moment } from "./common";
import { IEventEmitter } from "../common/EventEmitter";
import { EventEmitter } from "events";
export interface IResourceFactory<T extends IResourceEntity<IResourceFactory<T>>> extends IEventEmitter {
getEntityClass(): TConstructor<T>;
createEntity(): T;
from(attributes?: IEntityAttributes): T;
getRequest(): IClientRequest;
getEmbeddedKey(): string;
getEmbedded<A extends IEntityAttributes>(data: ICollectionResponse<A>): A[];
getUrl(path?: string): string;
getEntityCriteria(criteriaData: (object)[]): IEntityAttributes[];
}
export interface IResourceEntity<T extends IResourceFactory<IResourceEntity<T>>> {
id?: number;
updated_at: Date;
isNew(): boolean;
getFactory(): T;
}
export interface IResourceCollection<T> {
data: T[];
get(id: number): T | undefined;
map<U>(callbackfn: (value: T, index: number, array: T[]) => U): IResourceCollection<U>;
filter(callbackfn: (value: T, index: number, array: T[]) => boolean): IResourceCollection<T>;
reduce<U>(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U;
find(callbackfn: (value: T, index: number, array: T[]) => boolean): T | undefined;
findWhere(props: { [K in keyof T]?: T[K] }): T | undefined;
where(props: { [K in keyof T]?: T[K] }): IResourceCollection<T>;
every(callbackfn: (value: T, index: number, array: T[]) => boolean): boolean;
some(callbackfn: (value: T, index: number, array: T[]) => boolean): boolean;
each(callbackfn: (value: T, index: number, array: T[]) => void): void;
add(models: T[] | IResourceCollection<T>): void;
push(model: T): void;
sort(compareFn?: (a: T, b: T) => number): IResourceCollection<T>;
sortBy<K extends keyof T>(key: K): IResourceCollection<T>;
pluck<K extends keyof T>(key: K): any[]
chunk(size: number): IResourceCollection<T[]>
first(): T | undefined;
last(): T | undefined;
all(): T[];
size(): number;
}
export interface IResourcePagination<T> {
fetch(): void;
getData(): IResourceCollection<T>;
}
export interface IResourceEntityWithEmbedded<T extends IResourceFactory<IResourceEntityWithEmbedded<T>>> extends IResourceEntity<T> {
_embedded: IEmbedded;
}
export interface IEntityWithResponsibleUser<T extends IResourceFactory<IResourceEntity<T>>> extends IResourceEntity<T> {
responsible_user_id: number;
}
export interface IResourceEntityConstructor<T> {
from(request: IClientRequest, attributes?: JSONObject): T;
}
export interface ICollectionResponse<T> {
_links: {
href: string
}
_embedded: {
[index: string]: T[]
};
}
export interface IPaginationLinks {
current?: string;
next?: string;
prev?: string;
first?: string;
}
export interface IResourcePaginationParams<T extends IResourceEntity<IResourceFactory<T>>> {
url: string;
criteria?: Partial<ICriteria>;
factory: IResourceFactory<T>;
embedded: string | null;
options?: IRequestOptions;
}
export interface ISelfLinkResponse {
self: ILinkResponse;
}
export interface ILinkResponse {
href: string
}
export interface IPaginatedResponse {
_page: number;
_links: {
self?: ILinkResponse;
next?: ILinkResponse;
first?: ILinkResponse;
prev?: ILinkResponse;
}
_embedded: {
[index: string]: IEntityAttributes[]
};
}
export interface IEntityAttributes {
id?: number;
account_id?: number;
_links?: ISelfLinkResponse;
}
export type ICriteria<F = any, W = string | string[], L = number> = {
with: W;
page: number;
limit: L;
query: string | number;
filter: F;
order: object;
}
export interface IEmbedded { }