Buckets:
| // Use relative URL for production (HF Spaces serves frontend + backend from same origin) | |
| // Use localhost for development when VITE_API_URL is not set and we're on localhost | |
| const getApiUrl = () => { | |
| if (import.meta.env.VITE_API_URL) { | |
| return import.meta.env.VITE_API_URL; | |
| } | |
| // In production (HF Spaces), use relative URL | |
| // In development (localhost), use localhost:8000 | |
| if (typeof window !== 'undefined' && window.location.hostname === 'localhost') { | |
| return 'http://localhost:8000/api'; | |
| } | |
| return '/api'; // Relative URL for production | |
| }; | |
| const API_URL = getApiUrl(); | |
| // API pour les simulations existantes (thermique) | |
| export const api = { | |
| createSimulation: async (name, parameters) => { | |
| const response = await fetch(`${API_URL}/simulations/`, { | |
| method: 'POST', | |
| headers: { 'Content-Type': 'application/json' }, | |
| body: JSON.stringify({ name, parameters }) | |
| }); | |
| return response.json(); | |
| }, | |
| getSimulations: async () => { | |
| const response = await fetch(`${API_URL}/simulations/`); | |
| return response.json(); | |
| }, | |
| getSimulation: async (id) => { | |
| const response = await fetch(`${API_URL}/simulations/${id}/`); | |
| return response.json(); | |
| }, | |
| getResultImage: (simulation) => { | |
| // In production, use current origin; in dev, use localhost:8000 | |
| const baseUrl = import.meta.env.VITE_API_URL | |
| || (window.location.hostname === 'localhost' ? 'http://localhost:8000' : window.location.origin); | |
| return `${baseUrl}${simulation.result_image_path}`; | |
| } | |
| }; | |
| // API pour les simulations Poisson | |
| export const poissonApi = { | |
| createSimulation: async (params) => { | |
| const response = await fetch(`${API_URL}/poisson/simulations/`, { | |
| method: 'POST', | |
| headers: { 'Content-Type': 'application/json' }, | |
| body: JSON.stringify(params) | |
| }); | |
| if (!response.ok) { | |
| const error = await response.json(); | |
| throw new Error(error.detail || 'Erreur lors de la création'); | |
| } | |
| return response.json(); | |
| }, | |
| getSimulations: async () => { | |
| const response = await fetch(`${API_URL}/poisson/simulations/`); | |
| if (!response.ok) throw new Error('Erreur lors du chargement'); | |
| return response.json(); | |
| }, | |
| getSimulation: async (id) => { | |
| const response = await fetch(`${API_URL}/poisson/simulations/${id}/`); | |
| if (!response.ok) throw new Error('Simulation non trouvée'); | |
| return response.json(); | |
| }, | |
| deleteSimulation: async (id) => { | |
| const response = await fetch(`${API_URL}/poisson/simulations/${id}/`, { | |
| method: 'DELETE' | |
| }); | |
| if (!response.ok) throw new Error('Erreur lors de la suppression'); | |
| return true; | |
| }, | |
| previewMesh: async (params) => { | |
| const response = await fetch(`${API_URL}/poisson/simulations/preview_mesh/`, { | |
| method: 'POST', | |
| headers: { 'Content-Type': 'application/json' }, | |
| body: JSON.stringify(params) | |
| }); | |
| if (!response.ok) throw new Error('Erreur lors de la génération du maillage'); | |
| return response.json(); | |
| }, | |
| getMesh: async (id) => { | |
| const response = await fetch(`${API_URL}/poisson/simulations/${id}/mesh/`); | |
| if (!response.ok) throw new Error('Maillage non disponible'); | |
| return response.json(); | |
| }, | |
| getSolution: async (id) => { | |
| const response = await fetch(`${API_URL}/poisson/simulations/${id}/solution/`); | |
| if (!response.ok) throw new Error('Solution non disponible'); | |
| return response.json(); | |
| }, | |
| getAnimation: async (id) => { | |
| const response = await fetch(`${API_URL}/poisson/simulations/${id}/animation/`); | |
| if (!response.ok) throw new Error('Animation non disponible'); | |
| return response.json(); | |
| }, | |
| rerunSimulation: async (id) => { | |
| const response = await fetch(`${API_URL}/poisson/simulations/${id}/rerun/`, { | |
| method: 'POST' | |
| }); | |
| if (!response.ok) throw new Error('Erreur lors du relancement'); | |
| return response.json(); | |
| } | |
| }; | |
| // API pour Dang Van | |
| export const dangvanApi = { | |
| calculate: async (params) => { | |
| const response = await fetch(`${API_URL}/dangvan/`, { | |
| method: 'POST', | |
| headers: { 'Content-Type': 'application/json' }, | |
| body: JSON.stringify(params) | |
| }); | |
| if (!response.ok) throw new Error('Erreur lors du calcul'); | |
| return response.json(); | |
| } | |
| }; | |
| // API pour les simulations de diffusion thermique | |
| export const thermiqueApi = { | |
| createSimulation: async (params) => { | |
| const response = await fetch(`${API_URL}/thermique/simulations/`, { | |
| method: 'POST', | |
| headers: { 'Content-Type': 'application/json' }, | |
| body: JSON.stringify(params) | |
| }); | |
| if (!response.ok) { | |
| const error = await response.json(); | |
| throw new Error(error.detail || 'Erreur lors de la création'); | |
| } | |
| return response.json(); | |
| }, | |
| getSimulations: async () => { | |
| const response = await fetch(`${API_URL}/thermique/simulations/`); | |
| if (!response.ok) throw new Error('Erreur lors du chargement'); | |
| return response.json(); | |
| }, | |
| getSimulation: async (id) => { | |
| const response = await fetch(`${API_URL}/thermique/simulations/${id}/`); | |
| if (!response.ok) throw new Error('Simulation non trouvée'); | |
| return response.json(); | |
| }, | |
| deleteSimulation: async (id) => { | |
| const response = await fetch(`${API_URL}/thermique/simulations/${id}/`, { | |
| method: 'DELETE' | |
| }); | |
| if (!response.ok) throw new Error('Erreur lors de la suppression'); | |
| return true; | |
| }, | |
| previewMesh: async (params) => { | |
| const response = await fetch(`${API_URL}/thermique/simulations/preview_mesh/`, { | |
| method: 'POST', | |
| headers: { 'Content-Type': 'application/json' }, | |
| body: JSON.stringify(params) | |
| }); | |
| if (!response.ok) throw new Error('Erreur lors de la génération du maillage'); | |
| return response.json(); | |
| }, | |
| getMesh: async (id) => { | |
| const response = await fetch(`${API_URL}/thermique/simulations/${id}/mesh/`); | |
| if (!response.ok) throw new Error('Maillage non disponible'); | |
| return response.json(); | |
| }, | |
| getSolution: async (id) => { | |
| const response = await fetch(`${API_URL}/thermique/simulations/${id}/solution/`); | |
| if (!response.ok) throw new Error('Solution non disponible'); | |
| return response.json(); | |
| }, | |
| getAnimation: async (id) => { | |
| const response = await fetch(`${API_URL}/thermique/simulations/${id}/animation/`); | |
| if (!response.ok) throw new Error('Animation non disponible'); | |
| return response.json(); | |
| }, | |
| rerunSimulation: async (id) => { | |
| const response = await fetch(`${API_URL}/thermique/simulations/${id}/rerun/`, { | |
| method: 'POST' | |
| }); | |
| if (!response.ok) throw new Error('Erreur lors du relancement'); | |
| return response.json(); | |
| } | |
| }; | |
Xet Storage Details
- Size:
- 7.33 kB
- Xet hash:
- accb18e7e78884ec2303f22e2e50bf375fe3394824649409ab63e495f6278d63
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.