glass/src/common/services/apiClient.js
2025-07-04 14:31:04 +09:00

239 lines
7.0 KiB
JavaScript

const axios = require('axios');
const config = require('../config/config');
class APIClient {
constructor() {
this.baseURL = config.get('apiUrl');
this.client = axios.create({
baseURL: this.baseURL,
timeout: config.get('apiTimeout'),
headers: {
'Content-Type': 'application/json'
}
});
this.client.interceptors.response.use(
(response) => response,
(error) => {
console.error('API request failed:', error.message);
if (error.response) {
console.error('response status:', error.response.status);
console.error('response data:', error.response.data);
}
return Promise.reject(error);
}
);
}
async initialize() {
try {
const response = await this.client.get('/api/auth/status');
console.log('[APIClient] checked default user status:', response.data);
return true;
} catch (error) {
console.error('[APIClient] failed to initialize:', error);
return false;
}
}
async checkConnection() {
try {
const response = await this.client.get('/');
return response.status === 200;
} catch (error) {
return false;
}
}
async saveApiKey(apiKey) {
try {
const response = await this.client.post('/api/user/api-key', { apiKey });
return response.data;
} catch (error) {
console.error('failed to save api key:', error);
throw error;
}
}
async checkApiKey() {
try {
const response = await this.client.get('/api/user/api-key');
return response.data;
} catch (error) {
console.error('failed to check api key:', error);
return { hasApiKey: false };
}
}
async getUserBatchData(includes = ['profile', 'context', 'presets']) {
try {
const includeParam = includes.join(',');
const response = await this.client.get(`/api/user/batch?include=${includeParam}`);
return response.data;
} catch (error) {
console.error('failed to get user batch data:', error);
return null;
}
}
async getUserContext() {
try {
const response = await this.client.get('/api/user/context');
return response.data.context;
} catch (error) {
console.error('fail to get user context:', error);
return null;
}
}
async getUserProfile() {
try {
const response = await this.client.get('/api/user/profile');
return response.data;
} catch (error) {
console.error('failed to get user profile:', error);
return null;
}
}
async getUserPresets() {
try {
const response = await this.client.get('/api/user/presets');
return response.data;
} catch (error) {
console.error('failed to get user presets:', error);
return [];
}
}
async updateUserContext(context) {
try {
const response = await this.client.post('/api/user/context', context);
return response.data;
} catch (error) {
console.error('failed to update user context:', error);
throw error;
}
}
async addActivity(activity) {
try {
const response = await this.client.post('/api/user/activities', activity);
return response.data;
} catch (error) {
console.error('failed to add activity:', error);
throw error;
}
}
async getPresetTemplates() {
try {
const response = await this.client.get('/api/preset-templates');
return response.data;
} catch (error) {
console.error('failed to get preset templates:', error);
return [];
}
}
async updateUserProfile(profile) {
try {
const response = await this.client.post('/api/user/profile', profile);
return response.data;
} catch (error) {
console.error('failed to update user profile:', error);
throw error;
}
}
async searchUsers(name = '') {
try {
const response = await this.client.get('/api/users/search', {
params: { name }
});
return response.data;
} catch (error) {
console.error('failed to search users:', error);
return [];
}
}
async getUserProfileById(userId) {
try {
const response = await this.client.get(`/api/users/${userId}/profile`);
return response.data;
} catch (error) {
console.error('failed to get user profile by id:', error);
return null;
}
}
async saveConversationSession(sessionId, conversationHistory) {
try {
const payload = {
sessionId,
conversationHistory
};
const response = await this.client.post('/api/conversations', payload);
return response.data;
} catch (error) {
console.error('failed to save conversation session:', error);
throw error;
}
}
async getConversationSession(sessionId) {
try {
const response = await this.client.get(`/api/conversations/${sessionId}`);
return response.data;
} catch (error) {
console.error('failed to get conversation session:', error);
return null;
}
}
async getAllConversationSessions() {
try {
const response = await this.client.get('/api/conversations');
return response.data;
} catch (error) {
console.error('failed to get all conversation sessions:', error);
return [];
}
}
async deleteConversationSession(sessionId) {
try {
const response = await this.client.delete(`/api/conversations/${sessionId}`);
return response.data;
} catch (error) {
console.error('failed to delete conversation session:', error);
throw error;
}
}
async getSyncStatus() {
try {
const response = await this.client.get('/api/sync/status');
return response.data;
} catch (error) {
console.error('failed to get sync status:', error);
return null;
}
}
async getFullUserData() {
try {
const response = await this.client.get('/api/user/full');
return response.data;
} catch (error) {
console.error('failed to get full user data:', error);
return null;
}
}
}
const apiClient = new APIClient();
module.exports = apiClient;
module.exports = apiClient;