138 lines
4.0 KiB
TypeScript
138 lines
4.0 KiB
TypeScript
import axios from 'axios';
|
|
|
|
export const getBackendUrl = () => {
|
|
if (typeof window === 'undefined') return 'http://localhost:8000';
|
|
|
|
const host = window.location.hostname;
|
|
|
|
// If we are on HTTPS (Proxy/Mobile mode), we use port 3002 for the backend
|
|
if (window.location.protocol === 'https:') {
|
|
if (host.includes('.loca.lt')) {
|
|
return 'https://inventory-ai-api.loca.lt';
|
|
}
|
|
return `https://${host}:3002`;
|
|
}
|
|
|
|
return `http://${host}:8000`;
|
|
};
|
|
|
|
export const inventoryApi = {
|
|
getItems: async () => {
|
|
const res = await axios.get(`${getBackendUrl()}/items/`);
|
|
return res.data;
|
|
},
|
|
|
|
getStats: async () => {
|
|
const res = await axios.get(`${getBackendUrl()}/items/stats`);
|
|
return res.data;
|
|
},
|
|
|
|
syncBulkOperations: async (userId: number, operations: any[]) => {
|
|
const url = `${getBackendUrl()}/operations/bulk-sync`;
|
|
try {
|
|
const res = await axios.post(url, {
|
|
user_id: userId,
|
|
operations: operations
|
|
});
|
|
return res.data;
|
|
} catch (err: any) {
|
|
console.error("Sync API Error at:", url, err);
|
|
if (err.response?.status === 404) {
|
|
throw new Error(`404: Endpoint not found at ${url}`);
|
|
}
|
|
throw err;
|
|
}
|
|
},
|
|
|
|
analyzeLabel: async (formData: FormData) => {
|
|
const res = await axios.post(`${getBackendUrl()}/items/extract-label`, formData, {
|
|
headers: { 'Content-Type': 'multipart/form-data' }
|
|
});
|
|
return res.data;
|
|
},
|
|
|
|
createItem: async (userId: number, itemData: any) => {
|
|
const res = await axios.post(`${getBackendUrl()}/items/`, itemData, {
|
|
params: { user_id: userId }
|
|
});
|
|
return res.data;
|
|
},
|
|
|
|
updateItem: async (itemId: number, itemData: any) => {
|
|
const res = await axios.put(`${getBackendUrl()}/items/${itemId}`, itemData);
|
|
return res.data;
|
|
},
|
|
|
|
adjustStock: async (endpoint: string, data: any) => {
|
|
const res = await axios.post(`${getBackendUrl()}/operations/${endpoint}`, data);
|
|
return res.data;
|
|
},
|
|
|
|
deleteItem: async (itemId: number) => {
|
|
const res = await axios.delete(`${getBackendUrl()}/items/${itemId}`);
|
|
return res.data;
|
|
},
|
|
|
|
getAuditLogs: async (limit: number = 50) => {
|
|
const res = await axios.get(`${getBackendUrl()}/operations/logs`, { params: { limit } });
|
|
return res.data;
|
|
},
|
|
|
|
// Users
|
|
getUsers: async () => {
|
|
const res = await axios.get(`${getBackendUrl()}/users/`);
|
|
return res.data;
|
|
},
|
|
|
|
createUser: async (userData: any) => {
|
|
const res = await axios.post(`${getBackendUrl()}/users/`, userData);
|
|
return res.data;
|
|
},
|
|
|
|
login: async (credentials: any) => {
|
|
const res = await axios.post(`${getBackendUrl()}/users/login`, credentials);
|
|
return res.data;
|
|
},
|
|
|
|
deleteUser: async (userId: number) => {
|
|
const res = await axios.delete(`${getBackendUrl()}/users/${userId}`);
|
|
return res.data;
|
|
},
|
|
|
|
updateUser: async (userId: number, data: any) => {
|
|
const res = await axios.put(`${getBackendUrl()}/users/${userId}`, data);
|
|
return res.data;
|
|
},
|
|
|
|
getLdapConfig: async () => {
|
|
const res = await axios.get(`${getBackendUrl()}/users/ldap-config`);
|
|
return res.data;
|
|
},
|
|
updateLdapConfig: async (config: any) => {
|
|
const res = await axios.post(`${getBackendUrl()}/users/ldap-config`, config);
|
|
return res.data;
|
|
},
|
|
testLdapConnection: async (config: any) => {
|
|
const res = await axios.post(`${getBackendUrl()}/users/test-ldap`, config);
|
|
return res.data;
|
|
},
|
|
|
|
// Categories
|
|
getCategories: async () => {
|
|
const res = await axios.get(`${getBackendUrl()}/categories/`);
|
|
return res.data;
|
|
},
|
|
createCategory: async (data: any) => {
|
|
const res = await axios.post(`${getBackendUrl()}/categories/`, data);
|
|
return res.data;
|
|
},
|
|
updateCategory: async (id: number, data: any) => {
|
|
const res = await axios.put(`${getBackendUrl()}/categories/${id}`, data);
|
|
return res.data;
|
|
},
|
|
deleteCategory: async (id: number) => {
|
|
const res = await axios.delete(`${getBackendUrl()}/categories/${id}`);
|
|
return res.data;
|
|
}
|
|
};
|