Update README and documentation; refactor frontend components for improved structure and resilience
This commit is contained in:
193
frontend/src/services/api.js
Normal file
193
frontend/src/services/api.js
Normal file
@@ -0,0 +1,193 @@
|
||||
import axios from 'axios';
|
||||
import { API_CONFIG, SERVICE_URLS, FALLBACK_DATA } from '../constants';
|
||||
import { handleRequestError, formatServiceData, formatEventData } from '../utils/errorHandling';
|
||||
|
||||
// Create axios instances with timeout and error handling
|
||||
const apiClient = axios.create({
|
||||
baseURL: SERVICE_URLS.API_GATEWAY,
|
||||
timeout: API_CONFIG.TIMEOUT,
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
});
|
||||
|
||||
const adaptersClient = axios.create({
|
||||
baseURL: SERVICE_URLS.SERVICE_ADAPTERS,
|
||||
timeout: API_CONFIG.TIMEOUT,
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
});
|
||||
|
||||
const docsClient = axios.create({
|
||||
baseURL: SERVICE_URLS.API_DOCS,
|
||||
timeout: API_CONFIG.TIMEOUT,
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
});
|
||||
|
||||
// API Gateway endpoints
|
||||
export const apiGateway = {
|
||||
// Health check
|
||||
health: async () => {
|
||||
try {
|
||||
const response = await apiClient.get('/health');
|
||||
return { success: true, data: response.data };
|
||||
} catch (error) {
|
||||
return { success: false, ...handleRequestError(error) };
|
||||
}
|
||||
},
|
||||
|
||||
// Dashboards
|
||||
getDashboards: async () => {
|
||||
try {
|
||||
const response = await apiClient.get('/api/dashboards');
|
||||
return { success: true, data: response.data };
|
||||
} catch (error) {
|
||||
return { success: false, data: [], ...handleRequestError(error) };
|
||||
}
|
||||
},
|
||||
|
||||
// System data
|
||||
getEvents: async (params = {}) => {
|
||||
try {
|
||||
const response = await apiClient.get('/api/system/events', { params });
|
||||
return { success: true, data: response.data };
|
||||
} catch (error) {
|
||||
return { success: false, data: [], ...handleRequestError(error) };
|
||||
}
|
||||
},
|
||||
|
||||
getDeviceStates: async (params = {}) => {
|
||||
try {
|
||||
const response = await apiClient.get('/api/system/device-states', { params });
|
||||
return { success: true, data: response.data };
|
||||
} catch (error) {
|
||||
return { success: false, data: [], ...handleRequestError(error) };
|
||||
}
|
||||
},
|
||||
|
||||
getSystemMetrics: async () => {
|
||||
try {
|
||||
const response = await apiClient.get('/api/system/metrics');
|
||||
return { success: true, data: response.data };
|
||||
} catch (error) {
|
||||
return { success: false, data: null, ...handleRequestError(error) };
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// Service Adapters endpoints
|
||||
export const serviceAdapters = {
|
||||
// Health check
|
||||
health: async () => {
|
||||
try {
|
||||
const response = await adaptersClient.get('/health');
|
||||
return { success: true, data: response.data };
|
||||
} catch (error) {
|
||||
return { success: false, ...handleRequestError(error) };
|
||||
}
|
||||
},
|
||||
|
||||
// Services status
|
||||
getServices: async () => {
|
||||
try {
|
||||
const response = await adaptersClient.get('/services');
|
||||
return { success: true, data: response.data };
|
||||
} catch (error) {
|
||||
return { success: false, data: {}, ...handleRequestError(error) };
|
||||
}
|
||||
},
|
||||
|
||||
// Home Assistant
|
||||
getHAEntities: async () => {
|
||||
try {
|
||||
const response = await adaptersClient.get('/home-assistant/entities');
|
||||
return { success: true, data: response.data };
|
||||
} catch (error) {
|
||||
return { success: false, data: { entities: [] }, ...handleRequestError(error) };
|
||||
}
|
||||
},
|
||||
|
||||
// Frigate
|
||||
getFrigateEvents: async () => {
|
||||
try {
|
||||
const response = await adaptersClient.get('/frigate/events');
|
||||
return { success: true, data: response.data };
|
||||
} catch (error) {
|
||||
return { success: false, data: { events: [] }, ...handleRequestError(error) };
|
||||
}
|
||||
},
|
||||
|
||||
getFrigateCameras: async () => {
|
||||
try {
|
||||
const response = await adaptersClient.get('/frigate/cameras');
|
||||
return { success: true, data: response.data };
|
||||
} catch (error) {
|
||||
return { success: false, data: { cameras: [] }, ...handleRequestError(error) };
|
||||
}
|
||||
},
|
||||
|
||||
// Immich
|
||||
getImmichAssets: async () => {
|
||||
try {
|
||||
const response = await adaptersClient.get('/immich/assets');
|
||||
return { success: true, data: response.data };
|
||||
} catch (error) {
|
||||
return { success: false, data: { assets: [] }, ...handleRequestError(error) };
|
||||
}
|
||||
},
|
||||
|
||||
getImmichAlbums: async () => {
|
||||
try {
|
||||
const response = await adaptersClient.get('/immich/albums');
|
||||
return { success: true, data: response.data };
|
||||
} catch (error) {
|
||||
return { success: false, data: { albums: [] }, ...handleRequestError(error) };
|
||||
}
|
||||
},
|
||||
|
||||
// Events
|
||||
getEvents: async (limit = 100) => {
|
||||
try {
|
||||
const response = await adaptersClient.get('/events', { params: { limit } });
|
||||
return { success: true, data: response.data };
|
||||
} catch (error) {
|
||||
return { success: false, data: { events: [] }, ...handleRequestError(error) };
|
||||
}
|
||||
},
|
||||
|
||||
publishEvent: async (eventData) => {
|
||||
try {
|
||||
const response = await adaptersClient.post('/publish-event', eventData);
|
||||
return { success: true, data: response.data };
|
||||
} catch (error) {
|
||||
return { success: false, ...handleRequestError(error) };
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// API Docs endpoints
|
||||
export const apiDocs = {
|
||||
health: async () => {
|
||||
try {
|
||||
const response = await docsClient.get('/health');
|
||||
return { success: true, data: response.data };
|
||||
} catch (error) {
|
||||
return { success: false, ...handleRequestError(error) };
|
||||
}
|
||||
},
|
||||
|
||||
getServices: async () => {
|
||||
try {
|
||||
const response = await docsClient.get('/services');
|
||||
return { success: true, data: response.data };
|
||||
} catch (error) {
|
||||
return { success: false, data: {}, ...handleRequestError(error) };
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// Export fallback data from constants
|
||||
export const fallbackData = FALLBACK_DATA;
|
||||
Reference in New Issue
Block a user