import apiClient from './apiClient'; /** * AuthService - Handles all authentication related API calls * Uses apiClient which automatically handles token management */ class AuthService { /** * Register a new user * @param {Object} userData - User registration data * @param {string} userData.email - User email * @param {string} userData.password - User password * @param {string} userData.confirm_password - Password confirmation * @returns {Promise} - API response */ async register(userData) { try { console.log('AuthService: Registering user', userData); const response = await apiClient.post('/auth/register', userData); console.log('AuthService: Registration response', response.data); return response; } catch (error) { console.error('AuthService: Registration error', error); // Handle network errors if (!error.response) { throw new Error('Network error - please check your connection'); } throw error; } } /** * Login user * @param {Object} credentials - User login credentials * @param {string} credentials.email - User email * @param {string} credentials.password - User password * @param {boolean} credentials.rememberMe - Remember me flag * @returns {Promise} - API response */ async login(credentials) { try { console.log('AuthService: Logging in user', credentials); const response = await apiClient.post('/auth/login', credentials); console.log('AuthService: Login response', response.data); return response; } catch (error) { console.error('AuthService: Login error', error); // Handle network errors if (!error.response) { throw new Error('Network error - please check your connection'); } throw error; } } /** * Logout user * @returns {Promise} - API response */ async logout() { try { console.log('AuthService: Logging out user'); // For logout, we don't need to send any data // We just need to clear the token on the client side // The server will handle token invalidation if needed const response = await apiClient.post('/auth/logout'); console.log('AuthService: Logout response', response.data); return response; } catch (error) { console.warn('AuthService: Logout error (continuing anyway):', error.message); // For logout, we don't want to throw errors as it should always succeed // We just clear the local storage and let the UI handle it return { data: { success: true, message: 'Logged out successfully' } }; } } /** * Get current user data * @returns {Promise} - API response */ async getCurrentUser() { try { console.log('AuthService: Getting current user'); const response = await apiClient.get('/auth/user'); console.log('AuthService: Get user response', response.data); return response; } catch (error) { console.error('AuthService: Get user error', error); // Handle network errors if (!error.response) { throw new Error('Network error - please check your connection'); } throw error; } } } // Export singleton instance export default new AuthService();