2025-02-13 15:47:22 +09:00

91 lines
2.7 KiB
JavaScript

// src/services/api.js
import axios from 'axios';
// 서비스별 base URL
const MEMBER_URL = process.env.REACT_APP_MEMBER_URL || 'http://localhost:8081';
const MYSUB_URL = process.env.REACT_APP_MYSUB_URL || 'http://localhost:8082';
const RECOMMEND_URL = process.env.REACT_APP_RECOMMEND_URL || 'http://localhost:8083';
// 서비스별 axios 인스턴스 생성
const createAxiosInstance = (baseURL) => {
const instance = axios.create({
baseURL,
headers: {
'Content-Type': 'application/json',
},
});
// 토큰 인터셉터 추가
instance.interceptors.request.use(
(config) => {
// login API는 토큰이 필요없음
if (config.url === '/api/auth/login') {
return config;
}
const token = localStorage.getItem('token');
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
},
(error) => {
return Promise.reject(error);
}
);
return instance;
};
const memberApi = createAxiosInstance(MEMBER_URL);
const mysubApi = createAxiosInstance(MYSUB_URL);
const recommendationApi = createAxiosInstance(RECOMMEND_URL);
// 인증 관련 API
export const authApi = {
login: (loginRequest) => memberApi.post('/api/auth/login', loginRequest),
logout: (logoutRequest) => memberApi.post('/api/auth/logout', logoutRequest)
};
// 마이구독 관련 API
export const mySubscriptionApi = {
getTotalFee: (userId) => mysubApi.get(`/api/mysub/total-fee?userId=${userId}`),
getMySubscriptions: (userId) => mysubApi.get(`/api/mysub/list?userId=${userId}`),
getSubscriptionDetail: (id) => mysubApi.get(`/api/mysub/services/${id}`),
subscribe: (id, userId) => mysubApi.post(`/api/mysub/services/${id}/subscribe?userId=${userId}`),
cancelSubscription: (id) => mysubApi.delete(`/api/mysub/services/${id}`),
getCategories: () => mysubApi.get('/api/mysub/categories'),
getServicesByCategory: (categoryId) => mysubApi.get(`/api/mysub/services?categoryId=${categoryId}`)
};
// 추천 관련 API
export const recommendApi = { // 이름을 recommendationApi로 변경
getRecommendedCategory: (userId) => recommendationApi.get(`/api/recommend/categories?userId=${userId}`)
};
// API 응답 처리 헬퍼 함수
export const handleApiResponse = (response) => {
const { status, message, data } = response.data;
if (status === 200) {
return data;
} else {
throw new Error(message);
}
};
// 인증 토큰 관리 헬퍼 함수
export const setAuthToken = (token) => {
if (token) {
localStorage.setItem('token', token);
} else {
localStorage.removeItem('token');
}
};
export const getAuthToken = () => {
return localStorage.getItem('token');
};
export const removeAuthToken = () => {
localStorage.removeItem('token');
};