import { Contact, Customer } from "le-coffre-resources/dist/Notary"; import BaseNotary from "../BaseNotary"; import { ECivility } from "le-coffre-resources/dist/Customer/Contact"; // TODO Type get query params -> Where + inclue + orderby export interface IGetCustomersparams { where?: {}; include?: {}; } // TODO Type getbyuid query params export type IPutCustomersParams = { uid?: Customer["uid"]; contact?: Customer["contact"]; }; export interface IPostCustomersParams { first_name: string; last_name: string; email: string; cell_phone_number: string; civility: ECivility; address?: Contact["address"]; } export default class Customers extends BaseNotary { private static instance: Customers; private readonly baseURl = this.namespaceUrl.concat("/customers"); private constructor() { super(); } public static getInstance() { if (!this.instance) { return new this(); } else { return this.instance; } } public async get(q: IGetCustomersparams): Promise { const url = new URL(this.baseURl); const query = { q }; Object.entries(query).forEach(([key, value]) => url.searchParams.set(key, JSON.stringify(value))); try { return await this.getRequest(url); } catch (err) { this.onError(err); return Promise.reject(err); } } /** * @description : Create a Customer */ public async post(body: any): Promise { const url = new URL(this.baseURl); try { return await this.postRequest(url, body); } catch (err) { this.onError(err); return Promise.reject(err); } } public async getByUid(uid: string, q?: any): Promise { const url = new URL(this.baseURl.concat(`/${uid}`)); const query = { q }; if (q) Object.entries(query).forEach(([key, value]) => url.searchParams.set(key, JSON.stringify(value))); try { return await this.getRequest(url); } catch (err) { this.onError(err); return Promise.reject(err); } } public async put(uid: string, body: IPutCustomersParams): Promise { const url = new URL(this.baseURl.concat(`/${uid}`)); try { return await this.putRequest(url, body); } catch (err) { this.onError(err); return Promise.reject(err); } } }