tokyo-boy/inventory-backend
0
1import axios from "axios";2 3import { API_BASE_URL } from "../utils/constants";4 5 6// ==================================================7// Axios Instance8// ==================================================9 10const apiClient = axios.create({11 baseURL: API_BASE_URL,12 timeout: 10000,13 headers: {14 "Content-Type": "application/json",15 },16});17 18 19// ==================================================20// Request Interceptor21// ==================================================22 23apiClient.interceptors.request.use(24 (config) => {25 return config;26 },27 (error) => {28 return Promise.reject(error);29 }30);31 32 33// ==================================================34// Response Interceptor35// ==================================================36 37apiClient.interceptors.response.use(38 (response) => response,39 (error) => {40 const message =41 error?.response?.data?.detail ||42 error?.response?.data?.message ||43 error?.message ||44 "An unexpected error occurred.";45 46 return Promise.reject(47 new Error(message)48 );49 }50);51 52 53// ==================================================54// API Methods55// ==================================================56 57export const api = {58 get: async (url, config = {}) => {59 const response =60 await apiClient.get(url, config);61 62 return response.data;63 },64 65 post: async (66 url,67 data,68 config = {}69 ) => {70 const response =71 await apiClient.post(72 url,73 data,74 config75 );76 77 return response.data;78 },79 80 put: async (81 url,82 data,83 config = {}84 ) => {85 const response =86 await apiClient.put(87 url,88 data,89 config90 );91 92 return response.data;93 },94 95 patch: async (96 url,97 data,98 config = {}99 ) => {100 const response =101 await apiClient.patch(102 url,103 data,104 config105 );106 107 return response.data;108 },109 110 delete: async (111 url,112 config = {}113 ) => {114 const response =115 await apiClient.delete(116 url,117 config118 );119 120 return response.data;121 },122};123 124export default apiClient;