PENGENALAN DATABASE


 1. BASIS DATA MODUL : OBJEK DATABASE

Website ini menggunakan localStorage sebagai penyimpanan data sederhana (bukan database server-side seperti MySQL atau MongoDB). Data disimpan dalam bentuk objek JavaScript (array JSON) di file admin.js. Ada tiga objek utama: beritaDatalayananData, dan wargaData. Data ini diinisialisasi dengan contoh default dan dapat diubah melalui panel admin. Berikut detail objek data beserta contoh isinya.

Berita Data

Objek ini menyimpan data berita desa, termasuk judul, kategori, tanggal, isi, dan status. Disimpan di localStorage dengan key 'beritaData'.

  • Struktur Objek: Array of objects dengan properti: id (number), judul (string), kategori (string), tanggal (string, format YYYY-MM-DD), isi (string), status (string, e.g., 'Aktif' atau 'Draft').
  • Tampilan data:

Layanan Data

Objek ini menyimpan data layanan administrasi desa, seperti surat keterangan. Disimpan di localStorage dengan key 'layananData'.

  • Struktur Objek: Array of objects dengan properti: id (number), nama (string), deskripsi (string), syarat (string, multi-line), waktu (string), biaya (string), status (string, e.g., 'Aktif' atau 'Nonaktif').
  • Tampilan Data :

Warga Data

Objek ini menyimpan data penduduk desa. Disimpan di localStorage dengan key 'wargaData'.

  • Struktur Objek: Array of objects dengan properti: id (number), nik (string), nama (string), alamat (string), jk (string, e.g., 'Laki-laki' atau 'Perempuan'), tglLahir (string, format YYYY-MM-DD), status (string, e.g., 'Aktif', 'Pindah', atau 'Meninggal').
  • Tampilan Data:

Catatan Tambahan

  • Cara Akses Data: Di browser, buka Developer Tools > Application > Local Storage untuk melihat data ini secara real-time.
  • Manajemen Data: Data dapat ditambah/edit/hapus melalui panel admin (file admin.html dan admin.js). Setiap perubahan disimpan otomatis ke localStorage.
  • Keterbatasan: Ini bukan database sungguhan; data hilang jika localStorage dibersihkan. Untuk produksi, gunakan backend seperti Node.js dengan MongoDB atau Firebase.

 

2. BASIS DATA MODUL : FUNGSI AGREGAT


Fungsi agregat utama ditemukan di method loadDashboard(). Berikut detailnya:

1. Fungsi Agregat untuk Berita (COUNT Berita Aktif)

  • Lokasi: Method loadDashboard() (baris sekitar 100-110 di admin.js).
  • Deskripsi: Menghitung jumlah berita dengan status "Aktif" menggunakan filter() dan length. Hasil ditampilkan di elemen HTML dengan ID berita-count.
  • Kode Relevan:
    javascript
    document.getElementById('berita-count').textContent = this.beritaData.filter(b => b.status === 'Aktif').length;
  • Input: Array this.beritaData (dari localStorage).
  • Output: Jumlah integer (e.g., 2 dari data default).
  • Penggunaan: Diupdate saat dashboard dimuat atau navigasi ke section dashboard.

2. Fungsi Agregat untuk Warga (COUNT Warga Aktif)

  • Lokasi: Method loadDashboard() (baris sekitar 100-110 di admin.js).
  • Deskripsi: Menghitung jumlah warga dengan status "Aktif" menggunakan filter() dan length. Hasil diformat dengan toLocaleString() untuk pemisah ribuan dan ditampilkan di elemen HTML dengan ID total-penduduk.
  • Kode Relevan:
    javascript
    document.getElementById('total-penduduk').textContent = this.wargaData.filter(w => w.status === 'Aktif').length.toLocaleString();
  • Input: Array this.wargaData (dari localStorage).
  • Output: String dengan format angka (e.g., "2" dari data default).
  • Penggunaan: Diupdate saat dashboard dimuat atau navigasi ke section dashboard.

Catatan Tambahan

  • Statistik Hardcoded (Bukan Dinamis): Di dashboard, ada nilai tetap seperti "Kepala Keluarga: 892" dan "Surat Bulan Ini: 47" yang tidak menggunakan agregat dinamis. Ini hardcoded di HTML (admin.html), bukan dari data.
  • Fungsi Lain yang Mirip Agregat:
    • loadBeritaTable(): Menggunakan map() untuk iterasi dan generate tabel (bukan agregat murni, tapi memproses seluruh array).
    • loadLayananTable() dan loadWargaTable(): Serupa, menggunakan map() untuk render data, tapi tidak ada COUNT atau SUM.
    • Tidak ada fungsi agregat lain seperti total biaya layanan atau rata-rata umur warga.
  • Cara Menjalankan: Fungsi ini dipanggil di init() dan switchSection('dashboard'). Data bersumber dari localStorage, jadi agregat akan berubah jika data diedit via admin panel.
  • Saran: Jika butuh agregat lebih advanced (e.g., SUM biaya atau AVG umur), bisa ditambahkan method baru di class AdminPanel, misalnya:
    javascript3 lines
    Click to expand
    getTotalBiayaLayanan() {
    return this.layananData.reduce((total, layanan) => total + parseFloat(layanan.biaya.replace('Rp ', '') || 0), 0);
    ...