amocrm-client
Version:
JS Library for AmoCRM
40 lines (32 loc) • 1.51 kB
text/typescript
import { applyMixins } from "../../util";
import schema from "../../schema/v4";
import ResourceFactory from "../ResourceFactory";
import { IRequestOptions } from "../../interfaces/common";
import ResourcePagination from "../ResourcePagination";
import { IResourceFactory } from "../../interfaces/api";
import { hasGetByCriteria, hasCreate, hasGetById, hasUpdate } from "./mixins";
import { ContactCriteria, ContactCreateCriteria, ContactUpdateCriteria } from "../../interfaces/contact";
import { IContact, Contact } from "../models/Contact";
export interface IContactFactory extends IResourceFactory<IContact> {
get(criteria?: Partial<ContactCriteria>, options?: IRequestOptions): Promise<ResourcePagination<IContact>>;
getById(identity: number, criteria?: Pick<ContactCriteria, "with">, options?: IRequestOptions): Promise<IContact | null>;
create(criteria: (ContactCreateCriteria | IContact)[], options?: IRequestOptions): Promise<IContact[]>;
update(criteria: (ContactUpdateCriteria | IContact)[], options?: IRequestOptions): Promise<IContact[]>;
}
export class BaseContactFactory extends ResourceFactory<IContact> {
getEntityClass() {
return Contact;
}
getBaseUrl(): string {
return schema.entities.contacts.path;
}
getEmbeddedKey(): string {
return 'contacts';
}
}
export const ContactFactory = applyMixins(BaseContactFactory, [
hasGetByCriteria,
hasGetById,
hasCreate,
hasUpdate
]);