UNPKG

amocrm-client

Version:
131 lines (110 loc) 4.05 kB
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 { }