first commit

This commit is contained in:
Urtzi Alfaro
2025-07-17 13:54:51 +02:00
parent 347ff51bd7
commit 5bb3e93da4
41 changed files with 10084 additions and 94 deletions

View File

@@ -0,0 +1,96 @@
// frontend/dashboard/src/api/interceptors.ts
/**
* Request/Response interceptors for additional functionality
*/
import { AxiosRequestConfig, AxiosResponse } from 'axios';
import { apiCache } from './cache';
export function addLoggingInterceptor(client: any) {
// Request logging
client.interceptors.request.use(
(config: AxiosRequestConfig) => {
if (process.env.NODE_ENV === 'development') {
console.log(`🚀 API Request: ${config.method?.toUpperCase()} ${config.url}`, {
params: config.params,
data: config.data,
});
}
return config;
},
(error: any) => {
if (process.env.NODE_ENV === 'development') {
console.error('❌ API Request Error:', error);
}
return Promise.reject(error);
}
);
// Response logging
client.interceptors.response.use(
(response: AxiosResponse) => {
if (process.env.NODE_ENV === 'development') {
console.log(`✅ API Response: ${response.config.method?.toUpperCase()} ${response.config.url}`, {
status: response.status,
data: response.data,
});
}
return response;
},
(error: any) => {
if (process.env.NODE_ENV === 'development') {
console.error('❌ API Response Error:', {
url: error.config?.url,
status: error.response?.status,
data: error.response?.data,
});
}
return Promise.reject(error);
}
);
}
export function addCacheInterceptor(client: any) {
// Response caching for GET requests
client.interceptors.response.use(
(response: AxiosResponse) => {
const { method, url } = response.config;
if (method === 'get' && url) {
const cacheKey = `${method}:${url}`;
apiCache.set(cacheKey, response.data, 300000); // 5 minutes
}
return response;
},
(error: any) => Promise.reject(error)
);
}
export function addRetryInterceptor(client: any, maxRetries: number = 3) {
client.interceptors.response.use(
(response: AxiosResponse) => response,
async (error: any) => {
const { config } = error;
if (!config || config.__retryCount >= maxRetries) {
return Promise.reject(error);
}
config.__retryCount = config.__retryCount || 0;
config.__retryCount += 1;
// Only retry on network errors or 5xx errors
if (
!error.response ||
(error.response.status >= 500 && error.response.status < 600)
) {
const delay = Math.pow(2, config.__retryCount) * 1000; // Exponential backoff
await new Promise(resolve => setTimeout(resolve, delay));
return client(config);
}
return Promise.reject(error);
}
);
}