import { LeaveBalance } from '@/types'; import apiClient from '@/lib/api/axios-instance'; import { createHeaders } from '@/lib/api'; import { isAxiosError } from 'axios'; class LeaveBalanceApi { private baseUrl = '/api/LeaveBalance'; async getAll(): Promise { try { console.log('LeaveBalanceApi: Fetching all leave balances'); const response = await apiClient.get(this.baseUrl); console.log('LeaveBalanceApi: Successfully fetched all leave balances'); return response.data || []; } catch (error) { if (isAxiosError(error)) { console.error('LeaveBalanceApi: Error fetching all leave balances:', error.message); if (error.response) { console.error('LeaveBalanceApi: Response status:', error.response.status); console.error('LeaveBalanceApi: Response data:', error.response.data); } } else { console.error('LeaveBalanceApi: Unknown error fetching all leave balances:', error); } return []; } } async getByEmployeeIdAndYear(employeeId: number, year: number): Promise { try { console.log(`LeaveBalanceApi: Fetching leave balance for employee ${employeeId} and year ${year}`); const response = await apiClient.get(`${this.baseUrl}/employee/${employeeId}/year/${year}`); console.log(`LeaveBalanceApi: Successfully fetched leave balance for employee ${employeeId}`); return response.data || []; } catch (error) { if (isAxiosError(error)) { console.error(`LeaveBalanceApi: Error fetching leave balance for employee ${employeeId}:`, error.message); if (error.response) { console.error('LeaveBalanceApi: Response status:', error.response.status); console.error('LeaveBalanceApi: Response data:', error.response.data); } } else { console.error(`LeaveBalanceApi: Unknown error fetching leave balance for employee ${employeeId}:`, error); } return []; } } async getByEmployeeId(employeeId: number): Promise { try { console.log(`LeaveBalanceApi: Fetching all leave balances for employee ${employeeId}`); const response = await apiClient.get(`${this.baseUrl}/employee/${employeeId}`); console.log(`LeaveBalanceApi: Successfully fetched all leave balances for employee ${employeeId}`); return response.data || []; } catch (error) { if (isAxiosError(error)) { console.error(`LeaveBalanceApi: Error fetching all leave balances for employee ${employeeId}:`, error.message); if (error.response) { console.error('LeaveBalanceApi: Response status:', error.response.status); console.error('LeaveBalanceApi: Response data:', error.response.data); } } else { console.error(`LeaveBalanceApi: Unknown error fetching all leave balances for employee ${employeeId}:`, error); } return []; } } async getById(id: number): Promise { try { console.log(`LeaveBalanceApi: Fetching leave balance with ID ${id}`); const response = await apiClient.get(`${this.baseUrl}/${id}`); console.log(`LeaveBalanceApi: Successfully fetched leave balance with ID ${id}`); return response.data; } catch (error) { if (isAxiosError(error)) { console.error(`LeaveBalanceApi: Error fetching leave balance with ID ${id}:`, error.message); if (error.response) { console.error('LeaveBalanceApi: Response status:', error.response.status); console.error('LeaveBalanceApi: Response data:', error.response.data); } } else { console.error(`LeaveBalanceApi: Unknown error fetching leave balance with ID ${id}:`, error); } return null; } } async create(leaveBalance: LeaveBalance): Promise { try { console.log('LeaveBalanceApi: Creating new leave balance', leaveBalance); const response = await apiClient.post(this.baseUrl, leaveBalance, { headers: createHeaders(true), withCredentials: false }); console.log('LeaveBalanceApi: Successfully created leave balance', response.data); return response.data; } catch (error) { if (isAxiosError(error)) { console.error('LeaveBalanceApi: Error creating leave balance:', error.message); if (error.response) { console.error('LeaveBalanceApi: Response status:', error.response.status); console.error('LeaveBalanceApi: Response data:', error.response.data); } } else { console.error('LeaveBalanceApi: Unknown error creating leave balance:', error); } throw error; } } async update(id: number, leaveBalance: LeaveBalance): Promise { try { console.log(`LeaveBalanceApi: Updating leave balance ${id}`, leaveBalance); const response = await apiClient.put(`${this.baseUrl}/${id}`, leaveBalance); console.log(`LeaveBalanceApi: Successfully updated leave balance ${id}`, response.data); return response.data; } catch (error) { if (isAxiosError(error)) { console.error(`LeaveBalanceApi: Error updating leave balance ${id}:`, error.message); if (error.response) { console.error('LeaveBalanceApi: Response status:', error.response.status); console.error('LeaveBalanceApi: Response data:', error.response.data); } } else { console.error(`LeaveBalanceApi: Unknown error updating leave balance ${id}:`, error); } throw error; } } async delete(id: number): Promise { try { console.log(`LeaveBalanceApi: Deleting leave balance ${id}`); await apiClient.delete(`${this.baseUrl}/${id}`); console.log(`LeaveBalanceApi: Successfully deleted leave balance ${id}`); return true; } catch (error) { if (isAxiosError(error)) { console.error(`LeaveBalanceApi: Error deleting leave balance ${id}:`, error.message); if (error.response) { console.error('LeaveBalanceApi: Response status:', error.response.status); } } else { console.error(`LeaveBalanceApi: Unknown error deleting leave balance ${id}:`, error); } return false; } } } export const leaveBalanceApi = new LeaveBalanceApi();