Spaces:
Sleeping
Sleeping
| import axios from 'axios'; | |
| import { API_BASE_URL } from '@/config'; | |
| import apiClient from '@/lib/api/axios-instance'; | |
| import { createHeaders } from '@/lib/api'; | |
| import { AttendanceRecord, AttendanceUploadRequest, AttendanceResponse } from '@/types'; | |
| class AttendanceApi { | |
| private baseUrl = `/api/Attendance`; | |
| async getAll(): Promise<AttendanceRecord[]> { | |
| try { | |
| console.log('AttendanceApi: Fetching all attendance records from', this.baseUrl); | |
| const response = await apiClient.get(this.baseUrl); | |
| console.log('AttendanceApi: Response status', response.status); | |
| if (!response.data) { | |
| console.warn('AttendanceApi: No data in response'); | |
| return []; | |
| } | |
| if (!Array.isArray(response.data)) { | |
| console.warn('AttendanceApi: Response is not an array', response.data); | |
| return []; | |
| } | |
| return response.data; | |
| } catch (error) { | |
| console.error('Error fetching attendance records:', error); | |
| return []; | |
| } | |
| } | |
| async getByEmployeeId(employeeId: number): Promise<AttendanceRecord[]> { | |
| try { | |
| const response = await apiClient.get(`${this.baseUrl}/employee/${employeeId}`); | |
| return response.data || []; | |
| } catch (error) { | |
| console.error(`Error fetching attendance for employee ${employeeId}:`, error); | |
| return []; | |
| } | |
| } | |
| async getByMonth(month: number, year: number): Promise<AttendanceRecord[]> { | |
| try { | |
| const response = await apiClient.get(`${this.baseUrl}/month/${year}/${month}`); | |
| return response.data || []; | |
| } catch (error) { | |
| console.error(`Error fetching attendance for ${month}/${year}:`, error); | |
| return []; | |
| } | |
| } | |
| async getToday(employeeId: number): Promise<AttendanceRecord | null> { | |
| try { | |
| const response = await apiClient.get(`${this.baseUrl}/today/${employeeId}`); | |
| return response.data || null; | |
| } catch (error) { | |
| console.error(`Error fetching today's attendance for employee ${employeeId}:`, error); | |
| return null; | |
| } | |
| } | |
| async checkIn(employeeId: number): Promise<AttendanceRecord> { | |
| const response = await apiClient.post(`${this.baseUrl}/check-in`, { employeeId }); | |
| return response.data; | |
| } | |
| async checkOut(employeeId: number): Promise<AttendanceRecord> { | |
| const response = await apiClient.post(`${this.baseUrl}/check-out`, { employeeId }); | |
| return response.data; | |
| } | |
| async create(record: AttendanceRecord): Promise<AttendanceRecord | null> { | |
| try { | |
| const response = await apiClient.post(this.baseUrl, record); | |
| return response.data; | |
| } catch (error) { | |
| console.error('Error creating attendance record:', error); | |
| throw error; | |
| } | |
| } | |
| async update(id: number, record: AttendanceRecord): Promise<AttendanceRecord | null> { | |
| try { | |
| const response = await apiClient.put(`${this.baseUrl}/${id}`, record); | |
| return response.data; | |
| } catch (error) { | |
| console.error(`Error updating attendance record ${id}:`, error); | |
| throw error; | |
| } | |
| } | |
| async uploadBulk(data: AttendanceUploadRequest): Promise<AttendanceResponse> { | |
| try { | |
| const response = await apiClient.post(`${this.baseUrl}/bulk`, data); | |
| return response.data; | |
| } catch (error) { | |
| console.error('Error uploading bulk attendance:', error); | |
| throw error; | |
| } | |
| } | |
| // Method to handle Excel file upload | |
| async uploadExcel(file: File): Promise<AttendanceResponse> { | |
| try { | |
| const formData = new FormData(); | |
| formData.append('File', file); | |
| const response = await apiClient.post(`${this.baseUrl}/upload-excel`, formData); | |
| return response.data; | |
| } catch (error) { | |
| console.error('Error uploading attendance Excel file:', error); | |
| throw error; | |
| } | |
| } | |
| async delete(id: number): Promise<void> { | |
| try { | |
| await apiClient.delete(`${this.baseUrl}/${id}`); | |
| } catch (error) { | |
| console.error(`Error deleting attendance record ${id}:`, error); | |
| throw error; | |
| } | |
| } | |
| } | |
| export const attendanceApi = new AttendanceApi(); | |