91 lines
2.7 KiB
JavaScript
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');
|
|
}; |