Files
tfm_ainventory/frontend/lib/api.ts

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;
}
};