import apiClient from './api/client' export interface LoginRequest { email: string password: string } export interface LoginResponse { accessToken: string refreshToken: string user: { id: string email: string firstName: string lastName: string role: string } } export interface RefreshTokenResponse { accessToken: string } class AuthService { /** * Login user with email and password */ async login(credentials: LoginRequest): Promise { const response = await apiClient.post('/auth/login', credentials) // Store tokens if (response.data.accessToken) { localStorage.setItem('access_token', response.data.accessToken) } if (response.data.refreshToken) { localStorage.setItem('refresh_token', response.data.refreshToken) } if (response.data.user) { localStorage.setItem('user', JSON.stringify(response.data.user)) } return response.data } /** * Logout user */ async logout(): Promise { try { await apiClient.post('/auth/logout') } finally { // Clear local storage even if API call fails localStorage.removeItem('access_token') localStorage.removeItem('refresh_token') localStorage.removeItem('user') } } /** * Refresh access token */ async refreshToken(): Promise { const refreshToken = localStorage.getItem('refresh_token') const response = await apiClient.post('/auth/refresh', { refreshToken, }) if (response.data.accessToken) { localStorage.setItem('access_token', response.data.accessToken) } return response.data } /** * Get current user from localStorage */ getCurrentUser() { const userStr = localStorage.getItem('user') return userStr ? JSON.parse(userStr) : null } /** * Check if user is authenticated */ isAuthenticated(): boolean { return !!localStorage.getItem('access_token') } /** * Check if user is admin */ isAdmin(): boolean { const user = this.getCurrentUser() return user?.role === 'ADMIN' } } export const authService = new AuthService()