amocrm-client
Version:
JS Library for AmoCRM
39 lines (32 loc) • 1.5 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 } from "../../interfaces/api";
import { hasUpdate, hasCreate, hasGetById, hasGetByCriteria } from "./mixins";
import { LeadCriteria, LeadCreateCriteria, LeadUpdateCriteria } from '../../interfaces/lead';
import { ICustomer, Customer } from '../models/Customer';
export interface ICustomerFactory extends IResourceFactory<ICustomer> {
get(criteria?: Partial<LeadCriteria>, options?: IRequestOptions): Promise<ResourcePagination<ICustomer>>;
getById(identity: number, criteria?: Pick<LeadCriteria, "with">, options?: IRequestOptions): Promise<ICustomer | null>;
create(criteria: (LeadCreateCriteria | ICustomer)[], options?: IRequestOptions): Promise<ICustomer[]>;
update(criteria: (LeadUpdateCriteria | ICustomer)[], options?: IRequestOptions): Promise<ICustomer[]>;
}
export class BaseCustomerFactory extends ResourceFactory<ICustomer> {
getEntityClass() {
return Customer;
}
getBaseUrl(): string {
return schema.entities.leads.path;
}
getEmbeddedKey(): string {
return 'customers';
}
}
export const CustomerFactory = applyMixins(BaseCustomerFactory, [
hasGetByCriteria,
hasGetById,
hasCreate,
hasUpdate
]);