import { AxiosInstance, AxiosRequestConfig } from 'axios'; import { Shape, Methods, BackendEnum } from '../types'; export class BaseEnumModel { protected api: AxiosInstance; public basePath: string; constructor(api: AxiosInstance, basePath: string) { this.api = api; this.basePath = basePath; this.request = this.request.bind(this); this.getAll = this.getAll.bind(this); } async request(config: AxiosRequestConfig): Promise { const { data } = await this.api.request(config); return data; } async getAll(filter?: Shape): Promise { return this.request({ url: this.basePath, params: filter ? { filter } : undefined, method: Methods.GET, }); } } export class EmploymentTypes extends BaseEnumModel { constructor(api: AxiosInstance) { super(api, '/employment-types'); } } export class Currencies extends BaseEnumModel { constructor(api: AxiosInstance) { super(api, '/currencies'); } } export class Countries extends BaseEnumModel { constructor(api: AxiosInstance) { super(api, '/countries'); } } export class Genders extends BaseEnumModel { constructor(api: AxiosInstance) { super(api, '/genders'); } } export class Markets extends BaseEnumModel { constructor(api: AxiosInstance) { super(api, '/markets'); } } export class CreditTypes extends BaseEnumModel { constructor(api: AxiosInstance) { super(api, '/credit-types'); } } export class KycSources extends BaseEnumModel { constructor(api: AxiosInstance) { super(api, '/kyc-sources'); } } export class KycPurposes extends BaseEnumModel { constructor(api: AxiosInstance) { super(api, '/kyc-purposes'); } }