amocrm-client
Version:
JS Library for AmoCRM
41 lines (30 loc) • 1.36 kB
text/typescript
import schema from '../../schema/v4';
import { applyMixins } from "../../util";
import ResourceFactory from "../ResourceFactory";
import { IRequestOptions } from "../../interfaces/common";
import { IEntityAttributes, IResourceFactory } from "../../interfaces/api";
import { plainToClassFromExist } from "class-transformer";
import { AccountCriteria } from '../../interfaces/account';
import { IAccount, Account } from '../models/Account';
export interface IAccountFactory extends IResourceFactory<IAccount> {
get(criteria?: AccountCriteria, options?: IRequestOptions): Promise<IAccount>;
}
export class BaseAccountFactory extends ResourceFactory<IAccount> implements IAccountFactory {
async get(criteria?: AccountCriteria, options?: IRequestOptions): Promise<IAccount> {
const url = this.getUrl();
const request = this.getRequest();
const { data } = await request.get<IEntityAttributes>(url, criteria, options);
const instance = plainToClassFromExist(this.createEntity(), data);
return instance;
}
getEntityClass() {
return Account;
}
getBaseUrl(): string {
return schema.entities.account.path;
}
getEmbeddedKey(): string {
return '';
}
}
export const AccountFactory = applyMixins(BaseAccountFactory, []);