PHP Classes

File: client/src/app/api/agent.ts

Recommend this page to a friend!
  Classes of mohammad anzawi   PHP Wallet API and Application   client/src/app/api/agent.ts   Download  
File: client/src/app/api/agent.ts
Role: Auxiliary data
Content type: text/plain
Description: Auxiliary data
Class: PHP Wallet API and Application
Application to manage a wallet by calling an API
Author: By
Last change:
Date: 2 years ago
Size: 3,627 bytes
 

Contents

Class file image Download
?/** * Manage all api request from client to server */ import axios, {AxiosError, AxiosResponse} from "axios"; import {RegisterFormValues, User, UserFormValues} from "../models/User"; import {store} from "../stores/store"; import {Payment, PaymentFormValue} from "../models/Payment"; import Transaction, {TransactionFormValues, TransactionTotal} from "../models/Transaction"; import {Wallet} from "../models/Wallet"; // set default api url axios.defaults.baseURL = 'http://localhost:8000/api' // change request configuration axios.interceptors.request.use(config => { store.errorsStore.reset() // reset errors config.headers = { Accept : 'application/json' } /** * get token * if token is set then send it as Bearer Auth with header */ const token = store.commonStore.token if (token) { config.headers.Authorization = `Bearer ${token}` } return config }) /** * change response behavior */ axios.interceptors.response.use(async response => { store.errorsStore.reset() return response; }, (errors: AxiosError) => { store.errorsStore.setErrors({ code: errors.response?.status, message: errors.response?.data }) }); const responseBody = <T>(response: AxiosResponse<T>) => response.data const requests = { get: <T>(url: string) => axios.get<T>(url).then(responseBody), post: <T>(url: string, body: {}) => axios.post <T>(url, body).then(responseBody), put: <T>(url: string, body: {}) => axios.put <T>(url, body).then(responseBody), patch: <T>(url: string, body: {}) => axios.patch <T>(url, body).then(responseBody), del: <T>(url: string) => axios.delete <T>(url).then(responseBody), } // user endpoints const Users = { current: () => requests.get<User>('/usr/me'), login: (user: UserFormValues) => requests.post<User>('/login', user), logout: () => requests.post<string>('/logout', {}), register: (user: RegisterFormValues) => requests.post<User>('/register', user), list: () => requests.get<User[]>('/usr'), blockUnblock: (email: string) => requests.patch(`/usr/${email}`, email), wallet: () => requests.get<Wallet>('/wallet'), transaction: () => requests.get<Transaction[]>('/usr/transaction'), } // payment endpoints const Payments = { all: () => requests.get<Payment[]>('/payment'), create: (data: PaymentFormValue) => requests.post<Payment>('/payment', data), update: (data: PaymentFormValue, slug: string | undefined) => requests.put<Payment>(`/payment/${slug}`, data), upload : (file: any) => { let formData = new FormData() formData.append('File', file) return axios.post<string>('/payment/upload', formData/*, { headers: {'Content-type': 'multipart/form-data'} }*/) }, delete: (slug: string) => requests.del(`/payment/${slug}`), } // transaction endpoint const Transactions = { all: () => requests.get<Transaction[]>('/transaction'), approved: () => requests.get<Transaction[]>('/transaction/approved'), declined: () => requests.get<Transaction[]>('/transaction/declined'), pending: () => requests.get<Transaction[]>('/transaction/pending'), create: (data: TransactionFormValues) => requests.post<Transaction[]>('/transaction', data), confirm: (data: {}, uuid: string) => requests.patch<Transaction[]>(`/transaction/${uuid}`, data), totals: () => requests.get<TransactionTotal>('transaction/total'), allTotals: () => requests.get<TransactionTotal>('transaction/total/all'), } const agent = { Users, Payments, Transactions, } export default agent