Dashboard Overview

Total Karyawan

419

Total Log Absensi

32,738

Absensi Hari Ini

0

Total Dealer

6

Server API Aktif & Siap

Server menerima data dari aplikasi desktop Axum via REST API. Lihat dokumentasi lengkap di bawah.

Sinkronisasi terakhir: 2026-06-20 16:58:01

API Documentation

Complete REST API Reference for Axum Desktop ↔ PHP Server

Base URL
http://{HOST}/api.php?action={ACTION}

Semua request menggunakan format JSON. Response selalu berupa {"status": "success/error", "message": "...", ...}

1

Dashboard API

Get Dashboard Statistics

Ambil semua statistik dashboard: jumlah karyawan, log absensi, absensi hari ini, dan 10 log terakhir.

GET /api.php?action=dashboard_stats
Response Example:
{
  "status": "success",
  "message": "Success",
  "data": {
    "total_employees": 25,
    "total_attendance_logs": 1500,
    "today_attendance": 18,
    "today_checkin": 12,
    "today_checkout": 6,
    "total_dealers": 3,
    "recent_logs": [...]
  }
}
2

Karyawan (Employee) API

List Employees

Daftar semua karyawan dengan pagination, pencarian, dan filter dealer.

GET /api.php?action=employees
Query Parameters:
Parameter Type Default Keterangan
pageint1Halaman
limitint50Jumlah per halaman (max 100)
searchstring-Cari berdasarkan nama/NIP/employee_no
dealer_codestring-Filter dealer
sort_bystringcreated_atKolom sorting
sort_orderstringDESCASC / DESC
// Response
{
  "status": "success",
  "data": [
    {
      "id": "emp_001",
      "employee_no": "1001",
      "name": "Budi Santoso",
      "nip": "12345678",
      "dealer_code": "DLR-001",
      "dealer_name": "Alfa Motor Jakarta",
      "created_at": "2024-05-20 08:00:00",
      "updated_at": "2024-05-20 08:00:00"
    }
  ],
  "pagination": {
    "total": 25,
    "page": 1,
    "limit": 50,
    "total_pages": 1
  }
}

Create / Update Employee

Simpan atau update data karyawan. Jika employee_no + dealer_code sudah ada, data akan di-update.

POST /api.php?action=employees
// Request Body
{
  "employee_no": "1001",        // required
  "name": "Budi Santoso",      // required
  "nip": "12345678",           // optional
  "dealer_code": "DLR-001",    // optional
  "dealer_name": "Alfa Motor"  // optional
}

Get Employee Detail

Lihat detail karyawan beserta ringkasan absensinya.

GET /api.php?action=employee_detail&employee_no=1001&dealer_code=DLR-001
// Response
{
  "status": "success",
  "data": { "id": "...", "employee_no": "1001", "name": "Budi", ... },
  "attendance_summary": {
    "total_logs": 45,
    "first_attendance": "2024-01-15 07:55:00",
    "last_attendance": "2024-06-14 17:02:00"
  }
}

Delete Employee

Hapus karyawan berdasarkan employee_no.

POST /api.php?action=employee_delete
{
  "employee_no": "1001",
  "dealer_code": "DLR-001"  // optional, filter by dealer
}
3

Absensi (Attendance) API

List Attendance Logs

Daftar semua log absensi dengan filter tanggal, karyawan, dealer, dan status.

GET /api.php?action=attendance_logs
Query Parameters:
Parameter Type Keterangan
pageintHalaman (default: 1)
limitintJumlah per halaman (default: 50, max: 100)
datestringFilter tanggal (YYYY-MM-DD)
employee_nostringFilter berdasarkan no karyawan
dealer_codestringFilter dealer
statusstringFilter status (Check In / Check Out)
// Response
{
  "status": "success",
  "data": [
    {
      "id": "att_001",
      "employee_no": "1001",
      "employee_name": "Budi Santoso",
      "nip": "12345678",
      "dealer_code": "DLR-001",
      "dealer_name": "Alfa Motor Jakarta",
      "timestamp": "2024-05-20 08:00:00",
      "status": "Check In",
      "device_id": "DS-K1T804"
    }
  ],
  "pagination": { "total": 100, "page": 1, "limit": 50, "total_pages": 2 }
}

Create Single Attendance Log

Simpan satu log absensi.

POST /api.php?action=attendance
{
  "employee_no": "1001",                // required
  "timestamp": "2024-05-20 08:00:00",   // required
  "status": "Check In",                 // required
  "device_id": "DS-K1T804"             // optional
}

Delete Attendance Log

POST /api.php?action=attendance_delete
{ "id": "att_abc123" }
4

Laporan Absensi API

Laporan Harian (Grouped by Employee + Date)

Laporan absensi per karyawan per hari. Scan pertama = Check In, scan terakhir = Check Out. Termasuk kalkulasi durasi kerja.

GET /api.php?action=laporan_absensi&month=2024-06
Query Parameters:
Parameter Type Keterangan
monthstringBulan (YYYY-MM), default: bulan ini
dealer_codestringFilter dealer
employee_nostringFilter karyawan tertentu
// Response
{
  "status": "success",
  "data": [
    {
      "employee_no": "1001",
      "employee_name": "Budi Santoso",
      "nip": "12345678",
      "dealer_code": "DLR-001",
      "dealer_name": "Alfa Motor Jakarta",
      "tanggal": "2024-06-14",
      "check_in": "07:55:00",
      "check_out": "17:02:00",
      "total_scans": 2,
      "durasi_kerja": "9j 7m",
      "durasi_menit": 547
    }
  ],
  "summary": {
    "total_records": 350,
    "total_checkin": 340,
    "total_checkout": 320,
    "month": "2024-06",
    "dealer_code": ""
  }
}

Ringkasan Bulanan per Karyawan

Total hari hadir, total scan, dan rentang tanggal kehadiran per karyawan per bulan.

GET /api.php?action=laporan_summary_bulanan&month=2024-06
// Response
{
  "status": "success",
  "data": [
    {
      "employee_no": "1001",
      "employee_name": "Budi Santoso",
      "nip": "12345678",
      "dealer_code": "DLR-001",
      "total_hari_hadir": 22,
      "total_scans": 44,
      "first_scan": "2024-06-01 07:55:00",
      "last_scan": "2024-06-28 17:10:00"
    }
  ]
}
5

Dealer API

List All Dealers

Daftar semua dealer beserta jumlah karyawan dan log absensi.

GET /api.php?action=dealers
[
  {
    "dealer_code": "DLR-001",
    "dealer_name": "Alfa Motor JKT",
    "employee_count": 15,
    "attendance_count": 850
  }
]

Dealer Detail

Detail dealer termasuk daftar karyawan dan info sinkronisasi.

GET /api.php?action=dealer_detail&dealer_code=DLR-001
{
  "dealer_code": "DLR-001",
  "dealer_name": "Alfa Motor",
  "employee_count": 15,
  "attendance_count": 850,
  "last_sync": "2024-06-14",
  "employees": [...]
}
6

Sync API (Axum Desktop → Server)

⭐ Primary

🔄 Sync All (Rekomendasi Utama)

Endpoint utama yang digunakan oleh Axum desktop app. Mengirim semua karyawan dan log absensi baru sekaligus dalam satu request per dealer.

POST /api.php?action=sync_all
// Request Body (dari Axum SyncService)
{
  "kode_dealer": "DLR-001",
  "nama_dealer": "Alfa Motor Jakarta",
  "employees": [
    {
      "employee_no": "1001",
      "name": "Budi Santoso",
      "nip": "12345678",
      "created_at": "2024-01-15 10:00:00"
    }
  ],
  "attendance_logs": [
    {
      "employee_no": "1001",
      "timestamp": "2024-05-20 08:00:00",
      "status": "Check In",
      "device_id": "DS-K1T804"
    }
  ]
}

// Response
{
  "status": "success",
  "message": "Bulk data synced successfully",
  "synced": {
    "employees": 15,
    "attendance_logs": 48
  }
}

Get Last Sync Time

Axum menggunakan ini untuk incremental sync — hanya mengirim data setelah timestamp terakhir.

POST /api.php?action=get_last_sync_time
// Request
{ "kode_dealer": "DLR-001" }

// Response
{
  "status": "success",
  "last_sync_time": "2024-06-14 17:02:00"  // or null
}
7

Bulk Operations API

Bulk Insert Employees

Bulk insert banyak karyawan dalam satu request.

POST /api.php?action=bulk_employees
{
  "dealer_code": "DLR-001",
  "dealer_name": "Alfa Motor",
  "employees": [
    { "employee_no": "1001", "name": "Budi", "nip": "123" },
    { "employee_no": "1002", "name": "Ayu", "nip": "456" }
  ]
}

Bulk Insert Attendance

Bulk insert banyak log absensi dalam satu request.

POST /api.php?action=bulk_attendance
{
  "dealer_code": "DLR-001",
  "dealer_name": "Alfa Motor",
  "attendance_logs": [
    { "employee_no": "1001", "timestamp": "2024-06-14 08:00:00", "status": "Check In" },
    { "employee_no": "1001", "timestamp": "2024-06-14 17:00:00", "status": "Check Out" }
  ]
}

⚠️ Purge Old Attendance Data

Hapus log absensi yang lebih lama dari tanggal tertentu. Hati-hati: operasi ini tidak dapat dibatalkan!

POST /api.php?action=purge_attendance
{
  "before_date": "2024-01-01",          // required (YYYY-MM-DD)
  "dealer_code": "DLR-001"              // optional, limit to specific dealer
}

// Response
{ "status": "success", "message": "Purged 150 records before 2024-01-01", "deleted": 150 }
8

Health & Server Info API

Health Check

Cek status server dan koneksi database. Ideal untuk monitoring & ping.

GET /api.php?action=health
{
  "server": "running",
  "database": "connected",
  "timezone": "Asia/Jakarta",
  "server_time": "2024-06-14 15:30:00",
  "php_version": "8.2.5"
}

Server Info

Informasi lengkap server: statistik data, waktu sinkronisasi terakhir, dll.

GET /api.php?action=server_info
{
  "server_time": "2024-06-14 15:30:00",
  "total_employees": 25,
  "total_attendance_logs": 1500,
  "total_dealers": 3,
  "first_record": "2024-01-15",
  "last_sync": "2024-06-14 17:02:00"
}

Integrasi Rust / Axum

Berikut alur sinkronisasi yang digunakan oleh aplikasi desktop Axum (SyncService::run_full_sync):

1️⃣
Pull from Device
Ambil data dari mesin fingerprint via ISAPI
2️⃣
Get Last Sync Time
get_last_sync_time
3️⃣
Filter New Records
Hanya kirim log setelah last_sync_time
4️⃣
Sync All
sync_all (chunked 1000)
Rust Example (reqwest):
let client = reqwest::Client::new();

// Step 1: Get last sync time
let resp = client.post("http://server/api.php?action=get_last_sync_time")
    .json(&json!({ "kode_dealer": "DLR-001" }))
    .send().await?;

// Step 2: Push data
let payload = json!({
    "kode_dealer": "DLR-001",
    "nama_dealer": "Alfa Motor Jakarta",
    "employees": employees_vec,
    "attendance_logs": new_logs_vec  // filtered by last_sync_time
});

let resp = client.post("http://server/api.php?action=sync_all")
    .json(&payload)
    .send().await?;

📋 Ringkasan Semua Endpoint

Halaman Method Action Keterangan
Dashboard GET dashboard_stats Statistik ringkasan
Karyawan GET employees List + search + pagination
POST employees Tambah/update karyawan
GET employee_detail Detail + ringkasan absensi
POST employee_delete Hapus karyawan
Absensi GET attendance_logs List + filter + pagination
POST attendance Simpan satu log absensi
POST attendance_delete Hapus log absensi
Laporan GET laporan_absensi Laporan harian + durasi kerja
GET laporan_summary_bulanan Ringkasan bulanan per karyawan
Dealer GET dealers Daftar dealer
GET dealer_detail Detail dealer + list karyawan
Sync POST sync_all ⭐ Sync utama dari Axum
POST get_last_sync_time Timestamp sync terakhir
Bulk POST bulk_employees Bulk insert karyawan
POST bulk_attendance Bulk insert absensi
POST purge_attendance Hapus data lama
Health GET health Status server & database
GET server_info Info lengkap server