Lookup
Data referensi untuk dropdown dan autocomplete dengan pencarian dinamis
Endpoint /lookup menyediakan data ringan untuk komponen UI seperti dropdown, combobox, dan autocomplete. Setiap record dikembalikan dalam format {id, text} yang langsung dapat digunakan oleh frontend tanpa transformasi tambahan.
Kapan Menggunakan /lookup (When to Use /lookup)
| Skenario | Contoh |
|---|---|
| Dropdown pilihan di form | Memilih supplier saat membuat stock inbound |
| Autocomplete saat mengetik | Mencari produk berdasarkan nama di search box |
| Memuat seluruh data referensi | Mengisi combobox kategori saat halaman dimuat |
| Dropdown dengan filter | Menampilkan hanya supplier aktif di kota tertentu |
Dua Mode Operasi (Two Operation Modes)
Endpoint /lookup mendukung dua HTTP method dengan perilaku yang berbeda:
| Mode | Method | Header Wajib | Kegunaan |
|---|---|---|---|
| Dinamis | GET | X-Request-Mode: dynamic | Pencarian real-time saat pengguna mengetik |
| Statis | POST | X-Request-Mode: static | Memuat seluruh data atau data dengan filter |
Header X-Request-Mode bersifat wajib pada setiap request. Request tanpa header ini ditolak dengan error 400.
Mode Dinamis — Pencarian Real-Time (Dynamic Mode)
Mode dinamis digunakan untuk autocomplete. Setiap kali pengguna mengetik di search box, frontend mengirim request GET dengan kata kunci pencarian:
GET /api/mini-inventory/supplier/lookup?search=maju
X-Request-Mode: dynamicResponse:
{
"success": true,
"count": 1,
"data": [
{ "id": "550e8400-...", "text": "SUP-001 - PT Maju Jaya" }
],
"search": "maju",
"timestamp": "2026-04-16T10:30:00.000Z"
}Pencarian bersifat case-insensitive. Maksimal panjang kata kunci pencarian adalah 100 karakter.
Mode Statis — Memuat Data Dropdown (Static Mode)
Mode statis digunakan untuk memuat seluruh data dropdown sekaligus, misalnya saat halaman pertama kali dibuka:
{}Header: X-Request-Mode: static
Response:
{
"success": true,
"count": 3,
"data": [
{ "id": "550e8400-...", "text": "SUP-001 - PT Maju Jaya" },
{ "id": "661f9511-...", "text": "SUP-002 - CV Sejahtera" },
{ "id": "772a0622-...", "text": "SUP-003 - PT Global Teknologi" }
],
"timestamp": "2026-04-16T10:30:00.000Z"
}Lookup dengan Filter (Filtered Lookup)
Mode statis juga mendukung filter WHERE untuk membatasi data yang dikembalikan:
{
"where": [
{ "key": "is_active", "value": true }
],
"sort_columns": [
{ "column": "supplier_name", "direction": "ASC" }
]
}Header: X-Request-Mode: static
Konfigurasi Kolom (Column Configuration)
Secara default, field id mengambil nilai primary key dan field text mengambil nilai kolom kedua di fieldName. Konfigurasi ini dapat diubah melalui property fieldNameLookup di payload:
{
"tableName": "supplier",
"primaryKey": "supplier_id",
"fieldName": ["supplier_id", "supplier_code", "supplier_name"],
"fieldNameLookup": {
"id": "supplier_id",
"text": "supplier_name"
},
"action": {
"lookup": true
}
}Dengan konfigurasi ini, setiap item di array data berisi:
| Field | Sumber | Contoh |
|---|---|---|
id | supplier_id | "550e8400-..." |
text | supplier_name | "PT Maju Jaya" |
Default Scope
Endpoint /lookup selalu menerapkan default scope jika dikonfigurasi di payload. Hal ini memastikan dropdown hanya menampilkan data yang relevan (misalnya hanya supplier dengan is_active = true) tanpa perlu menambahkan filter manual di setiap request.
Perilaku ini berbeda dari endpoint /datatables yang tidak menerapkan default scope.
Perilaku Cache (Cache Behavior)
| Mode | Cache | Keterangan |
|---|---|---|
| GET (dinamis) | Tidak | Pencarian real-time selalu query langsung ke database |
| POST (statis) | Ya | Data dropdown statis di-cache di Redis |
| POST (filter) | Ya | Data dropdown dengan filter di-cache di Redis |
Cache di-invalidasi secara otomatis setelah operasi mutasi (create, update, delete) berhasil pada endpoint yang sama.
Langkah Selanjutnya (Next Steps)
- Adjust untuk operasi increment/decrement atomik
- Aggregate untuk fungsi agregasi data
- POST /lookup untuk spesifikasi teknis lengkap