import { ICollectionResponse, IEntityAttributes, IResourceEntity, IResourceFactory } from "../interfaces/api"; import { IClientRequest } from "../common/ClientRequest"; import { EventEmitter } from "../common/EventEmitter"; import { TConstructor } from "../types"; import { IClient } from "../Client"; import { IFactoryCriteriaBuilder } from "./factories/common/FactoryCriteriaBuilder"; import { ObjectKey } from "../interfaces/common"; import { IFactoryConstructors } from "./factories"; /** * Основной класс фабрики сущностей. Класс-фабрика служит для создания * новых сущностей. Например, {@link LeadFactory} отвечает за {@link Lead} * */ export default abstract class ResourceFactory>> extends EventEmitter implements IResourceFactory { protected readonly request: IClientRequest; protected readonly client: IClient; readonly criteriaBuilder: IFactoryCriteriaBuilder; constructor(client: IClient); abstract getBaseUrl(): string; abstract getEmbeddedKey(): ObjectKey; getClient(): IClient; getEmbedded(data: ICollectionResponse): A[]; /** * @returns новый экземпляр сущности. Например, {@link LeadFactory} вернёт {@link Lead} * */ createEntity(): T; abstract getEntityClass(): TConstructor; /** * Возвращает ссылку на объект запроса * */ getRequest(): IClientRequest; /** * Форматирует адрес на основе baseUrl фабрики * */ getUrl(path?: string): string; /** * Создаёт сущность и заполняет её атрибутами, которые * будут синхронизироваться с порталом AmoCRM * */ from(attributes?: object): T; /** * Приводит все переданные объекты-сущности в массиве * criteriaData к их объекту-атрибутов (ключ-значение) * @param criteriaData массив plain JavaScript-объектов или сущностей * @returns массив plain JavaScript-объектов * */ getEntityCriteria(criteriaData: (object)[]): IEntityAttributes[]; }