BIG_UPDATE deleted vps, added s3 infrastructure.

This commit is contained in:
Georgiy Syralev
2025-11-23 14:35:16 +03:00
parent ae1f93a934
commit c4c2610480
173 changed files with 22684 additions and 5894 deletions

View File

@@ -0,0 +1,71 @@
import axios, { AxiosError } from 'axios';
import type { InternalAxiosRequestConfig } from 'axios';
import { API_URL } from '../config/api';
// Создаём экземпляр axios с базовым URL
export const apiClient = axios.create({
baseURL: API_URL,
headers: {
'Content-Type': 'application/json',
},
});
// Добавляем токен к каждому запросу
apiClient.interceptors.request.use(
(config: InternalAxiosRequestConfig) => {
const token = localStorage.getItem('access_token');
if (token && config.headers) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
},
(error) => {
return Promise.reject(error);
}
);
// Обработка ответов и ошибок
apiClient.interceptors.response.use(
(response) => {
return response;
},
(error: AxiosError) => {
if (error.response) {
const status = error.response.status;
// Обрабатываем ошибки без автоматического перенаправления
// Компоненты сами решают, как обрабатывать ошибки
switch (status) {
case 401:
// Unauthorized - очищаем токен
localStorage.removeItem('access_token');
sessionStorage.clear();
// Вызываем событие для реакции на изменение авторизации
window.dispatchEvent(new Event('unauthorized'));
break;
case 403:
// Forbidden - нет прав доступа
console.warn('Access denied (403)');
break;
case 404:
// Not Found - ресурс не найден
console.warn('Resource not found (404)');
break;
case 500:
case 502:
case 503:
case 504:
// Server errors
console.error(`Server error (${status})`);
break;
}
} else if (error.request) {
// Ошибка сети - сервер недоступен
console.error('Network error:', error.message);
}
return Promise.reject(error);
}
);
export default apiClient;