index.ts 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import axios from 'axios'
  2. const api = axios.create({
  3. baseURL: '/api',
  4. timeout: 30000,
  5. headers: { 'Content-Type': 'application/json' }
  6. })
  7. // Project APIs
  8. export const projectApi = {
  9. list: (params?: { topology?: string; skip?: number; limit?: number }) =>
  10. api.get('/projects', { params }),
  11. get: (id: number) => api.get(`/projects/${id}`),
  12. create: (data: any) => api.post('/projects', data),
  13. update: (id: number, data: any) => api.put(`/projects/${id}`, data),
  14. delete: (id: number) => api.delete(`/projects/${id}`)
  15. }
  16. // Plan APIs
  17. export const planApi = {
  18. list: (params?: { project_id?: number; skip?: number; limit?: number }) =>
  19. api.get('/plans', { params }),
  20. get: (id: number) => api.get(`/plans/${id}`),
  21. create: (data: any) => api.post('/plans', data),
  22. update: (id: number, data: any) => api.put(`/plans/${id}`, data),
  23. delete: (id: number) => api.delete(`/plans/${id}`),
  24. download: (id: number) => api.get(`/plans/${id}/download`),
  25. downloadByUuid: (uuid: string) => api.get(`/plans/by-plan-id/${uuid}/download`),
  26. uploadResults: (id: number, file: File) => {
  27. const formData = new FormData()
  28. formData.append('file', file)
  29. return api.post(`/plans/${id}/upload-results`, formData, {
  30. headers: { 'Content-Type': 'multipart/form-data' }
  31. })
  32. },
  33. getResults: (id: number) => api.get(`/plans/${id}/results`)
  34. }
  35. // Experience APIs
  36. export const experienceApi = {
  37. list: (params?: { topology?: string; tag?: string; skip?: number; limit?: number }) =>
  38. api.get('/experience', { params }),
  39. get: (id: number) => api.get(`/experience/${id}`),
  40. create: (data: any) => api.post('/experience', data),
  41. delete: (id: number) => api.delete(`/experience/${id}`)
  42. }
  43. // Generation / Rule Engine APIs
  44. export const generationApi = {
  45. listScanParameters: (category?: string) =>
  46. api.get('/scan-parameters', { params: category ? { category } : {} }),
  47. recommendRange: (parameterName: string, boundaryConditions: Record<string, any>) =>
  48. api.post('/recommend-range', { parameter_name: parameterName, boundary_conditions: boundaryConditions }),
  49. generatePlan: (data: { boundary_conditions: Record<string, any>; parameter_names?: string[]; model_path?: string }) =>
  50. api.post('/generate-plan', data),
  51. generatePlanForProject: (projectId: number, data: { boundary_conditions?: Record<string, any>; parameter_names?: string[]; model_path?: string }) =>
  52. api.post(`/projects/${projectId}/generate-plan`, data)
  53. }
  54. // Analytics APIs
  55. export const analyticsApi = {
  56. listMetrics: () => api.get('/analytics/metrics'),
  57. experienceStats: (topology?: string) =>
  58. api.get('/analytics/experience/stats', { params: topology ? { topology } : {} }),
  59. experienceSimilar: (params: Record<string, number>, topology?: string, topK = 5, tolerance = 0.3) =>
  60. api.post('/analytics/experience/similar', { params }, { params: { topology, top_k: topK, tolerance } }),
  61. planTrend: (planId: number, paramKey: string, metricKey: string) =>
  62. api.get(`/analytics/plans/${planId}/trend`, { params: { param_key: paramKey, metric_key: metricKey } }),
  63. planPareto: (planId: number, xMetric = 'total_losses_w', yMetric = 'efficiency_pct') =>
  64. api.get(`/analytics/plans/${planId}/pareto`, { params: { x_metric: xMetric, y_metric: yMetric } }),
  65. planSensitivity: (planId: number, metricKey: string) =>
  66. api.get(`/analytics/plans/${planId}/sensitivity`, { params: { metric_key: metricKey } }),
  67. projectOverview: (projectId: number) =>
  68. api.get(`/analytics/projects/${projectId}/overview`)
  69. }
  70. export default api