mirror of
https://github.com/myronblair/epic-download
synced 2026-06-30 17:51:00 -05:00
113 lines
2.9 KiB
JavaScript
113 lines
2.9 KiB
JavaScript
import axios from 'axios';
|
|
|
|
const BACKEND_URL = process.env.REACT_APP_BACKEND_URL;
|
|
const API = `${BACKEND_URL}/api`;
|
|
|
|
// Create axios instance
|
|
const apiClient = axios.create({
|
|
baseURL: API,
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
},
|
|
});
|
|
|
|
// Add auth token to requests if available
|
|
apiClient.interceptors.request.use((config) => {
|
|
const token = localStorage.getItem('auth_token');
|
|
if (token) {
|
|
config.headers.Authorization = `Bearer ${token}`;
|
|
}
|
|
return config;
|
|
});
|
|
|
|
// Auth API
|
|
export const authAPI = {
|
|
login: async (email, password) => {
|
|
const response = await apiClient.post('/auth/login', { email, password });
|
|
return response.data;
|
|
},
|
|
verify: async () => {
|
|
const response = await apiClient.post('/auth/verify');
|
|
return response.data;
|
|
},
|
|
};
|
|
|
|
// Destinations API
|
|
export const destinationsAPI = {
|
|
getAll: async (category, search) => {
|
|
const params = {};
|
|
if (category) params.category = category;
|
|
if (search) params.search = search;
|
|
const response = await apiClient.get('/destinations', { params });
|
|
return response.data;
|
|
},
|
|
getById: async (id) => {
|
|
const response = await apiClient.get(`/destinations/${id}`);
|
|
return response.data;
|
|
},
|
|
create: async (destination) => {
|
|
const response = await apiClient.post('/destinations', destination);
|
|
return response.data;
|
|
},
|
|
update: async (id, destination) => {
|
|
const response = await apiClient.put(`/destinations/${id}`, destination);
|
|
return response.data;
|
|
},
|
|
delete: async (id) => {
|
|
const response = await apiClient.delete(`/destinations/${id}`);
|
|
return response.data;
|
|
},
|
|
};
|
|
|
|
// Specials API
|
|
export const specialsAPI = {
|
|
getAll: async () => {
|
|
const response = await apiClient.get('/specials');
|
|
return response.data;
|
|
},
|
|
create: async (special) => {
|
|
const response = await apiClient.post('/specials', special);
|
|
return response.data;
|
|
},
|
|
update: async (id, special) => {
|
|
const response = await apiClient.put(`/specials/${id}`, special);
|
|
return response.data;
|
|
},
|
|
deleteByDestination: async (destinationId) => {
|
|
const response = await apiClient.delete(`/specials/destination/${destinationId}`);
|
|
return response.data;
|
|
},
|
|
};
|
|
|
|
// Contact API
|
|
export const contactAPI = {
|
|
submit: async (contact) => {
|
|
const response = await apiClient.post('/contact', contact);
|
|
return response.data;
|
|
},
|
|
};
|
|
|
|
// Newsletter API
|
|
export const newsletterAPI = {
|
|
subscribe: async (email) => {
|
|
const response = await apiClient.post('/newsletter/subscribe', { email });
|
|
return response.data;
|
|
},
|
|
};
|
|
|
|
// Image Upload API
|
|
export const uploadAPI = {
|
|
uploadImage: async (file) => {
|
|
const formData = new FormData();
|
|
formData.append('file', file);
|
|
const response = await apiClient.post('/upload/image', formData, {
|
|
headers: {
|
|
'Content-Type': 'multipart/form-data',
|
|
},
|
|
});
|
|
return response.data;
|
|
},
|
|
};
|
|
|
|
export default apiClient;
|