Spaces:
Sleeping
Sleeping
| import axios from 'axios'; | |
| // Read base URL from env (build-time). Provide a safe fallback and normalize a few | |
| // common misconfigurations (e.g. ":8090" or missing protocol). | |
| let API_BASE_URL = process.env.REACT_APP_API_BASE_URL; | |
| const resolveBrowserDefault = () => { | |
| if (typeof window !== 'undefined' && window.location) { | |
| return `${window.location.origin}/api`; | |
| } | |
| return 'http://localhost:8090'; | |
| }; | |
| // Normalization helpers: | |
| const normalizeBaseUrl = (raw) => { | |
| if (!raw) return resolveBrowserDefault(); | |
| if (raw.startsWith('/')) return raw; | |
| // If user provided a port-only like ":8090", prepend localhost | |
| if (raw.startsWith(':')) return `http://localhost${raw}`; | |
| // If no protocol specified but contains host (e.g. "localhost:8090"), add http:// | |
| if (!/^https?:\/\//i.test(raw)) return `http://${raw}`; | |
| return raw; | |
| }; | |
| API_BASE_URL = normalizeBaseUrl(API_BASE_URL); | |
| // Helpful debug info during development (will appear in browser console) | |
| if (process.env.NODE_ENV === 'development') { | |
| // eslint-disable-next-line no-console | |
| console.debug('[api] Using API_BASE_URL =', API_BASE_URL); | |
| } | |
| const AUTH_TOKEN_KEY = 'authToken'; | |
| const api = axios.create({ | |
| baseURL: API_BASE_URL, | |
| headers: { | |
| 'Content-Type': 'application/json', | |
| }, | |
| }); | |
| api.interceptors.request.use((config) => { | |
| const token = window.localStorage.getItem(AUTH_TOKEN_KEY); | |
| if (token) { | |
| config.headers.Authorization = `Bearer ${token}`; | |
| } | |
| return config; | |
| }); | |
| const buildPath = (path) => path.replace(/\/{2,}/g, '/'); | |
| export const authAPI = { | |
| signup: (userData) => api.post(buildPath('/auth/signup'), userData), | |
| signin: (credentials) => api.post(buildPath('/auth/signin'), credentials), | |
| getProfile: () => api.get(buildPath('/api/users/profile')), | |
| }; | |
| export const taskAPI = { | |
| createTask: (taskData) => api.post(buildPath('/api/tasks'), taskData), | |
| getTask: (taskId) => api.get(buildPath(`/api/tasks/${taskId}`)), | |
| getUserTasks: () => api.get(buildPath('/api/tasks/user')), | |
| getAllTasks: () => api.get(buildPath('/api/tasks')), | |
| updateTask: (taskId, taskData) => api.put(buildPath(`/api/tasks/${taskId}`), taskData), | |
| assignTask: (taskId, userId) => api.put(buildPath(`/api/tasks/${taskId}/user/${userId}/assigned`)), | |
| completeTask: (taskId) => api.put(buildPath(`/api/tasks/${taskId}/complete`)), | |
| deleteTask: (taskId) => api.delete(buildPath(`/api/tasks/${taskId}`)), | |
| }; | |
| export const submissionAPI = { | |
| createSubmission: (submissionData) => api.post(buildPath('/api/submissions'), submissionData), | |
| getSubmission: (submissionId) => api.get(buildPath(`/api/submissions/${submissionId}`)), | |
| getAllSubmissions: () => api.get(buildPath('/api/submissions')), | |
| getTaskSubmissions: (taskId) => api.get(buildPath(`/api/submissions/task/${taskId}`)), | |
| updateSubmission: (submissionId, submissionData) => api.put(buildPath(`/api/submissions/${submissionId}`), submissionData), | |
| }; | |
| export const userAPI = { | |
| getAllUsers: () => api.get(buildPath('/api/users')), | |
| getUserById: (userId) => api.get(buildPath(`/api/users/${userId}`)), | |
| }; | |
| export default api; | |