| ```javascript |
| import axios from 'axios'; |
| |
| const API_BASE_URL = process.env.VUE_APP_API_URL || 'http://localhost:3000/api'; |
| |
| const api = axios.create({ |
| baseURL: API_BASE_URL, |
| timeout: 10000, |
| headers: { |
| 'Content-Type': 'application/json', |
| 'Accept': 'application/json' |
| } |
| }); |
| |
| // Add request interceptor for auth |
| api.interceptors.request.use((config) => { |
| const token = localStorage.getItem('authToken'); |
| if (token) { |
| config.headers.Authorization = `Bearer ${token}`; |
| } |
| return config; |
| }, (error) => { |
| return Promise.reject(error); |
| }); |
| |
| // Add response interceptor for error handling |
| api.interceptors.response.use((response) => { |
| return response.data; |
| }, (error) => { |
| if (error.response) { |
| switch (error.response.status) { |
| case 401: |
| // Handle unauthorized |
| break; |
| case 404: |
| // Handle not found |
| break; |
| case 500: |
| // Handle server error |
| break; |
| default: |
| // Handle other errors |
| } |
| } |
| return Promise.reject(error); |
| }); |
| |
| export default { |
| // Recipes API |
| getRecipes() { |
| return api.get('/recipes'); |
| }, |
| getRecipe(id) { |
| return api.get(`/recipes/${id}`); |
| }, |
| createRecipe(recipe) { |
| return api.post('/recipes', recipe); |
| }, |
| updateRecipe(id, recipe) { |
| return api.put(`/recipes/${id}`, recipe); |
| }, |
| deleteRecipe(id) { |
| return api.delete(`/recipes/${id}`); |
| }, |
| |
| // Calendar API |
| getCalendarEvents() { |
| return api.get('/calendar'); |
| }, |
| createCalendarEvent(event) { |
| return api.post('/calendar', event); |
| }, |
| updateCalendarEvent(id, event) { |
| return api.put(`/calendar/${id}`, event); |
| }, |
| deleteCalendarEvent(id) { |
| return api.delete(`/calendar/${id}`); |
| }, |
| |
| // Grocery API |
| getGroceryLists() { |
| return api.get('/grocery'); |
| }, |
| createGroceryList(list) { |
| return api.post('/grocery', list); |
| }, |
| updateGroceryList(id, list) { |
| return api.put(`/grocery/${id}`, list); |
| }, |
| deleteGroceryList(id) { |
| return api.delete(`/grocery/${id}`); |
| } |
| }; |
| ``` |