Nxdom Framework

Nusantara eXtreme Development Object Model — dokumentasi resmi

NexaDb (React)

Materi ini merangkum pola CRUD NexaDb pada React Native. Penyimpanan memakai AsyncStorage sebagai backend dengan enkripsi field otomatis dan observer untuk update real-time.

Peran NexaDb

NexaDb adalah lapisan storage utama di dokumentasi React ini:

  • Menyiapkan konfigurasi database dan store default.
  • Menyediakan lifecycle: install, bind ref, dan reset.
  • Menjadi pintu masuk operasi CRUD melalui ref storage yang aktif.
import { NexaDb } from "NexaJS"; const nexaDb = new NexaDb(); await nexaDb.install(); // siapkan store default await nexaDb.Ref(); // bind NXUI.ref agar bisa dipakai langsung via NXUI.ref // ... aplikasi berjalan ... // opsional untuk reset await nexaDb.uninstall();

Setelah await nexaDb.Ref(), instance ref tersimpan di NXUI.ref. Ini diperlukan jika modul lain di aplikasi Anda mengakses storage lewat NXUI.ref secara langsung.

Format key penyimpanan

Semua data disimpan memakai pola key gabungan agar setiap record unik per database dan store. Dengan format ini, satu aplikasi bisa punya banyak store tanpa bentrok key.

// {dbName}_{storeName}_ MyAppDB_users_user_123

CRUD Auto Mode (direkomendasikan)

Auto mode membuat store saat dipakai dan cocok untuk pengembangan cepat.

// Init + bind ref storage const nexaDb = new NexaDb(); await nexaDb.install(); const db = await nexaDb.Ref(); // Set await db.setAuto("users", { id: "user_123", name: "John Doe", email: "john@example.com", }); // Get const user = await db.getAuto("users", "user_123"); // GetAll const allUsers = await db.getAllAuto("users"); // Delete await db.deleteAuto("users", "user_123");

Alur ringkas: validasi id → tambah timestamp → enkripsi field → simpan → notify observer.

CRUD Manual Mode

Manual mode dipakai jika Anda ingin kontrol struktur store lebih ketat sejak awal.

const nexaDb = new NexaDb(); await nexaDb.install(); const db = await nexaDb.Ref(); await db.set("users", { id: "user_123", name: "John Doe" }); const user = await db.get("users", "user_123"); const allUsers = await db.getAll("users"); await db.delete("users", "user_123");

Manual mode cocok saat daftar store sudah final dan Anda ingin perilaku lebih predictable.

Alur SET / GET / GETALL / DELETE

SET : Input -> Validasi -> Encrypt -> Save -> Notify -> Return id GET : Key -> Validasi -> Read -> Decrypt -> Return data/null GETALL : Store -> Scan key -> MultiGet -> Decrypt loop -> Return { data: [...] } DELETE : Key -> Validasi -> Remove -> Notify delete -> Return true/false

Enkripsi otomatis

  • Saat set/setAuto: field data di-obfuscate otomatis.
  • Saat get/getAll: data di-decrypt otomatis sebelum dikembalikan.
  • Field metadata seperti id, createdAt, updatedAt dipertahankan.

Praktiknya, Anda cukup kirim object biasa; proses encrypt/decrypt dikelola oleh layer storage.

Observer / watch

Tersedia pola observer untuk memantau perubahan store. Gunakan ini untuk refresh UI secara reaktif setelah operasi set/delete.

const nexaDb = new NexaDb(); await nexaDb.install(); const db = await nexaDb.Ref(); const unwatch = db.watch("users", (payload) => { // payload.changeType: "update" | "delete" | "refresh" // payload.data: data terbaru (sudah decrypt) }); // saat tidak diperlukan lagi unwatch();

Error handling

  • SET/DELETE: gagal validasi atau operasi -> melempar error/false sesuai method.
  • GET/GETALL: jika key/data tidak ada -> null atau array kosong (graceful).
  • Jika id kosong saat set, operasi harus dianggap invalid.

Manual vs Auto

  • Auto: lebih fleksibel, store dibuat otomatis, cocok untuk iterasi cepat.
  • Manual: lebih ketat/predictable, cocok saat skema store sudah final.

Praktik yang disarankan

  • Selalu sertakan id saat menyimpan data.
  • Pilih satu mode (auto/manual) per fitur agar pola akses tetap konsisten.
  • Gabungkan dengan watch() untuk sinkronisasi UI real-time.
  • Untuk data banyak, prioritaskan getAllAuto() lalu filter di memory sesuai kebutuhan UI.
  • Gunakan penamaan store per domain bisnis (mis. users, posts, settings).

Contoh penggunaan NXUI.ref

Setelah await nexaDb.Ref(), Anda bisa memakai NXUI.ref langsung di halaman lain tanpa membuat instance baru.

import { NXUI, NexaDb } from "NexaJS"; const nexaDb = new NexaDb(); await nexaDb.install(); await nexaDb.Ref(); // bind ke NXUI.ref await NXUI.ref.setAuto("users", { id: "user_001", name: "Ian", role: "admin", }); const user = await NXUI.ref.getAuto("users", "user_001"); const users = await NXUI.ref.getAllAuto("users"); await NXUI.ref.deleteAuto("users", "user_001");
const stopWatch = NXUI.ref.watch("users", async () => { const rows = await NXUI.ref.getAllAuto("users"); setUsers(rows.data || []); }); // cleanup saat unmount stopWatch();