154 lines
3.6 KiB
JavaScript
154 lines
3.6 KiB
JavaScript
import axios from 'axios';
|
|
import authService from './auth';
|
|
|
|
// Usar variable de entorno si está disponible, sino usar '/api' (proxy en desarrollo)
|
|
const baseURL = import.meta.env.VITE_API_BASE_URL || '/api';
|
|
|
|
console.log('baseURL', baseURL);
|
|
|
|
const api = axios.create({
|
|
baseURL,
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
},
|
|
});
|
|
|
|
// Interceptor para añadir autenticación a las peticiones
|
|
api.interceptors.request.use(
|
|
(config) => {
|
|
const authHeader = authService.getAuthHeader();
|
|
if (authHeader) {
|
|
config.headers.Authorization = authHeader;
|
|
}
|
|
return config;
|
|
},
|
|
(error) => {
|
|
return Promise.reject(error);
|
|
}
|
|
);
|
|
|
|
// Interceptor para manejar errores 401 (no autenticado)
|
|
api.interceptors.response.use(
|
|
(response) => response,
|
|
(error) => {
|
|
if (error.response?.status === 401) {
|
|
// Disparar evento personalizado para mostrar diálogo de login
|
|
window.dispatchEvent(new CustomEvent('auth-required', {
|
|
detail: {
|
|
message: 'Se requiere autenticación para esta acción',
|
|
config: error.config
|
|
}
|
|
}));
|
|
}
|
|
return Promise.reject(error);
|
|
}
|
|
);
|
|
|
|
export default {
|
|
// Estadísticas
|
|
async getStats() {
|
|
const response = await api.get('/stats');
|
|
return response.data;
|
|
},
|
|
|
|
// Workers
|
|
async getWorkers() {
|
|
const response = await api.get('/workers');
|
|
return response.data;
|
|
},
|
|
|
|
async updateWorkers(workers) {
|
|
const response = await api.put('/workers', workers);
|
|
return response.data;
|
|
},
|
|
|
|
// Favoritos
|
|
async getFavorites() {
|
|
const response = await api.get('/favorites');
|
|
return response.data;
|
|
},
|
|
|
|
async addFavorite(favorite) {
|
|
const response = await api.post('/favorites', favorite);
|
|
return response.data;
|
|
},
|
|
|
|
async removeFavorite(platform, id) {
|
|
const response = await api.delete(`/favorites/${platform}/${id}`);
|
|
return response.data;
|
|
},
|
|
|
|
// Artículos
|
|
async getArticles(limit = 100, offset = 0, additionalParams = {}) {
|
|
const params = { limit, offset, ...additionalParams };
|
|
const response = await api.get('/articles', { params });
|
|
return response.data;
|
|
},
|
|
|
|
async getArticleFacets() {
|
|
const response = await api.get('/articles/facets');
|
|
return response.data;
|
|
},
|
|
|
|
async searchArticles(query) {
|
|
const response = await api.get('/articles/search', {
|
|
params: { q: query },
|
|
});
|
|
return response.data;
|
|
},
|
|
|
|
// Logs
|
|
async getLogs(limit = 500, sinceLine = null) {
|
|
const params = { limit };
|
|
if (sinceLine !== null && sinceLine > 0) {
|
|
params.since = sinceLine;
|
|
}
|
|
const response = await api.get('/logs', { params });
|
|
return response.data;
|
|
},
|
|
|
|
// Configuración
|
|
async getConfig() {
|
|
const response = await api.get('/config');
|
|
return response.data;
|
|
},
|
|
|
|
// Telegram
|
|
async getTelegramConfig() {
|
|
const response = await api.get('/telegram/config');
|
|
return response.data;
|
|
},
|
|
|
|
async setTelegramConfig(config) {
|
|
const response = await api.put('/telegram/config', config);
|
|
return response.data;
|
|
},
|
|
|
|
async getTelegramThreads() {
|
|
const response = await api.get('/telegram/threads');
|
|
return response.data;
|
|
},
|
|
|
|
// Usuarios
|
|
async getUsers() {
|
|
const response = await api.get('/users');
|
|
return response.data;
|
|
},
|
|
|
|
async createUser(userData) {
|
|
const response = await api.post('/users', userData);
|
|
return response.data;
|
|
},
|
|
|
|
async deleteUser(username) {
|
|
const response = await api.delete(`/users/${username}`);
|
|
return response.data;
|
|
},
|
|
|
|
async changePassword(passwordData) {
|
|
const response = await api.post('/users/change-password', passwordData);
|
|
return response.data;
|
|
},
|
|
};
|
|
|