amocrm-client
Version:
JS Library for AmoCRM
46 lines (35 loc) • 1.76 kB
text/typescript
import schema from '../../schema/v4';
import { applyMixins } from "../../util";
import ResourceFactory from "../ResourceFactory";
import ResourcePagination from "../ResourcePagination";
import { IRequestOptions } from "../../interfaces/common";
import { IResourceFactory, IResourcePagination } from "../../interfaces/api";
import { hasGetByCriteria, hasCreate, hasGetById, hasUpdate } from "./mixins";
import { Catalog, ICatalog } from '../models/Catalog';
import { CatalogCreateCriteria, CatalogCriteria, CatalogElementCriteria, CatalogUpdateCriteria } from '../../interfaces/catalog';
import { hasCatalogElements } from './mixins/hasCatalogElements';
export interface ICatalogFactory extends IResourceFactory<ICatalog> {
get(criteria?: Partial<CatalogCriteria>, options?: IRequestOptions): Promise<ResourcePagination<ICatalog>>;
getById(identity: number, criteria?: null, options?: IRequestOptions): Promise<ICatalog | null>;
create(criteria: (CatalogCreateCriteria | ICatalog)[], options?: IRequestOptions): Promise<ICatalog[]>;
update(criteria: (CatalogUpdateCriteria | ICatalog)[], options?: IRequestOptions): Promise<ICatalog[]>;
elements(catalogId: number, criteria?: CatalogElementCriteria, options?: IRequestOptions): IResourcePagination<ICatalog>;
}
export class BaseCatalogFactory extends ResourceFactory<ICatalog> {
getEntityClass() {
return Catalog;
}
getBaseUrl(): string {
return schema.entities.catalogs.path;
}
getEmbeddedKey(): string {
return 'catalogs';
}
}
export const CatalogFactory = applyMixins(BaseCatalogFactory, [
hasCatalogElements,
hasGetByCriteria,
hasGetById,
hasCreate,
hasUpdate
]);