svet-pos-project-client / src / api / agent.ts
agent.ts
Raw
import axios, { AxiosResponse } from "axios";
import { request } from "http";
import { IBusiness } from "./IBusiness";
import { IOutlet } from "./IOutlet";
import { IReceipt } from "./IReceipt";

axios.defaults.baseURL = "http://localhost:4000";
const config = {
  headers: { Authorization: `Bearer ${localStorage.token}` },
};
const responseBody = (response: AxiosResponse) => response.data;

const sleep = (ms: number) => (response: AxiosResponse) =>
  new Promise<AxiosResponse>((resolve) =>
    setTimeout(() => resolve(response), ms)
  );

const requests = {
  get: (url: string) => axios.get(url).then(sleep(1000)).then(responseBody),
  getMy: (url: string) =>axios.get(url, {headers: { Authorization: `Bearer ${localStorage.token}` },})
      .then(sleep(1000))
      .then(responseBody),
  post: (url: string, body: {}) =>axios.post(url, body)
      .then(sleep(1000))
      .then(responseBody),
  postMy: (url: string, body: {}) =>axios.post(url, body, config)
      .then(sleep(1000))
      .then(responseBody),
  put: (url: string, body: {}) =>axios.put(url, body, config)
      .then(sleep(1000))
      .then(responseBody),
  del: (url: string) => axios.delete(url)
      .then(sleep(1000))
      .then(responseBody),
  postForm: (url: string, file: Blob) => {
    let formData = new FormData();
    formData.append("File", file);
    return axios
      .post(url, formData, {
        headers: { "Content-type": "multipart/form-data" },
      })
      .then(responseBody);
  },
};

export const setAuthToken = (token: string) => {
  if (token) {
    axios.defaults.headers.common["x-auth-token"] = token;
  } else {
    delete axios.defaults.headers.common["x-auth-token"];
  }
};
export const Outlets = {
  list: (): Promise<IOutlet> => requests.get("/outlet"),

  details: (id: string) => requests.get(`/outlets/${id}`),

  create: (outlet: IOutlet) => requests.post("/outlets", outlet),

  update: (outlet: IOutlet) => requests.put(`/outlets/3`, outlet),

  delete: (id: string) => requests.del(`/outlets/${id}`),
};

export const Auth = {
  /**
   * 
   * @param loginCredential 
   * {
    "username": "inshaf_cashier",
    "password": "127149"
    }
   * @returns 
    {
    "id": "275d9f12-aa3a-4e80-97a5-db30b21858d6",
    "email": "inshafowners@gmail.com",
    "username": "inshaf_cashier",
    "password": "$2b$10$8t60uIiFUKUNqzOkFW/gYuS8jsMlaouk8HYTOgpmPEpDcbTtF.euy",
    "salt": "$2b$10$8t60uIiFUKUNqzOkFW/gYu",
    "mobileNumber": "inshaf_cashier",
    "role": "CASHIER",
    "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6Imluc2hhZl9jYXNoaWVyIiwicm9sZSI6IkNBU0hJRVIiLCJpYXQiOjE2Mjc0NDQ4MDgsImV4cCI6MTYzMTA0NDgwOH0.up3zs1wPgodGKvegx4iy4p4MMGOT-XSEhJJJ_C2fPOo"
}
   */
  login: (loginCredential: any): Promise<any> =>
    requests.post(`/user/login`, loginCredential),

  register: (ownerDetails: any): Promise<any> =>
    requests.post(`/user/owner/register`, ownerDetails),

  loadUser: (): Promise<any> => {
    return axios.get("/user", config);
  },
};

export const Business = {
  list: (): Promise<IBusiness> => requests.getMy("/business"),

  details: (id: string) => requests.get(`/business/${id}`),

  create: (business: any): Promise<any> =>
    requests.postMy("/business", business),

  update: (business: IBusiness) => requests.put(`/business/`, business),

  delete: (id: string) => requests.del(`/business/${id}`),
};

export const Receipt = {
  list: (): Promise<IReceipt> => requests.getMy("/receipt"),

  details: (id: string) => requests.get(`/receipt/${id}`),

  create: (receipt: any): Promise<any> => requests.postMy("/receipt", receipt),

  update: (receipt: IReceipt) => requests.put(`/receipt/`, receipt),

  delete: (id: string) => requests.del(`/receipt/${id}`),
};