{"id":55,"date":"2026-10-21T05:33:49","date_gmt":"2026-10-21T05:33:49","guid":{"rendered":"https:\/\/kelompok5.tibcore.my.id\/?page_id=55"},"modified":"2026-10-21T05:33:49","modified_gmt":"2026-10-21T05:33:49","slug":"alur-utama-arsitektur","status":"publish","type":"page","link":"https:\/\/kelompok5.tibcore.my.id\/?page_id=55","title":{"rendered":"Alur Utama &#038; Arsitektur"},"content":{"rendered":"<div class=\"business-section\" id=\"alur\">\n<h2>Alur Utama &amp; <em>Arsitektur<\/em><\/h2>\n<h3>Arsitektur aplikasi<\/h3>\n<p>Aplikasi dikembangkan dengan pola <b>MVVM (Model-View-ViewModel)<\/b> pada klien Android native (Kotlin). Pola ini memisahkan antarmuka pengguna (Presentation Layer), logika pengolahan data (ViewModel), dan sumber data (Data Layer), sehingga pengembangan lebih rapi dan mudah dipelihara.<\/p>\n<p>Seluruh aliran data jarak jauh bertumpu pada layanan <b>Firebase<\/b> (Authentication, Firestore, dan Storage), sedangkan penyimpanan lokal memakai <b>SQLite dan SharedPreferences<\/b>. Lapisan Repository menjadi satu-satunya pintu komunikasi (Single Source of Truth) yang menjembatani ViewModel dengan sumber data tersebut.<\/p>\n<h3>Lapisan arsitektur<\/h3>\n<div class=\"business-table-wrap\">\n<table class=\"business-table\">\n<thead>\n<tr>\n<th>Lapisan<\/th>\n<th>Komponen<\/th>\n<th>Fungsi<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Presentation<\/td>\n<td>Activity, Fragment, RecyclerView Adapter<\/td>\n<td>Menampilkan UI dan menerima input<\/td>\n<\/tr>\n<tr>\n<td>ViewModel<\/td>\n<td>AuthViewModel, LaporanViewModel, KlaimViewModel (LiveData)<\/td>\n<td>Menyimpan state dan logika tampilan<\/td>\n<\/tr>\n<tr>\n<td>Repository<\/td>\n<td>AuthRepository, LaporanRepository, KlaimRepository<\/td>\n<td>Satu pintu data; memanggil Firebase dan mengelola cache<\/td>\n<\/tr>\n<tr>\n<td>Remote: Firebase<\/td>\n<td>Cloud Firestore, Authentication, Storage, Cloud Messaging<\/td>\n<td>Data laporan real-time, akun, foto, notifikasi<\/td>\n<\/tr>\n<tr>\n<td>Data lokal<\/td>\n<td>SQLite, SharedPreferences<\/td>\n<td>Cache laporan, draf, bookmark, sesi, tema<\/td>\n<\/tr>\n<tr>\n<td>Perangkat dan iklan<\/td>\n<td>Kamera, AdMob SDK<\/td>\n<td>Foto, iklan<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h3>Alur data real-time (daftar laporan)<\/h3>\n<ol>\n<li>Fragment daftar mengamati LiveData dari LaporanViewModel.<\/li>\n<li>LaporanRepository memasang snapshot listener pada koleksi items di Firestore.<\/li>\n<li>Saat ada laporan baru atau perubahan, Firestore mengirim pembaruan ke aplikasi.<\/li>\n<li>Repository meneruskan data ke ViewModel dan menyalin cache ke SQLite.<\/li>\n<li>RecyclerView menampilkan perubahan otomatis (DiffUtil).<\/li>\n<li>Jika offline, daftar diambil dari cache sampai koneksi kembali.<\/li>\n<\/ol>\n<h3>Alur klaim dan notifikasi<\/h3>\n<ol>\n<li>Pengklaim mengisi jawaban verifikasi, lalu KlaimRepository menulis dokumen baru ke koleksi claims.<\/li>\n<li>Listener pada koleksi claims milik pelapor menerima perubahan secara real-time dan menampilkan klaim baru.<\/li>\n<li>Pelapor menyetujui atau menolak; status pada claims dan items diperbarui dalam satu transaksi.<\/li>\n<li>Semua pengguna yang membuka laporan tersebut melihat status berubah otomatis.<\/li>\n<li>Notifikasi dikirim lewat Firebase Cloud Messaging, atau lewat listener di dalam aplikasi bila pengiriman otomatis dari server tidak tersedia pada paket yang dipakai.<\/li>\n<\/ol>\n<h3>Struktur data<\/h3>\n<div class=\"business-table-wrap\">\n<table class=\"business-table\">\n<thead>\n<tr>\n<th>Koleksi<\/th>\n<th>Field utama<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><b>users<\/b><\/td>\n<td>uid, nim, nama, email, role (mahasiswa atau admin), fcm_token<\/td>\n<\/tr>\n<tr>\n<td><b>items<\/b><\/td>\n<td>id, tipe (Kehilangan atau Ditemukan), nama_barang, kategori, deskripsi, lokasi_teks, foto_url, tanggal, kontak, status (Aktif, Diklaim, Selesai), pelapor_id, dibuat_pada<\/td>\n<\/tr>\n<tr>\n<td><b>claims<\/b><\/td>\n<td>id, item_id, pengklaim_id, jawaban_verifikasi, status<\/td>\n<\/tr>\n<tr>\n<td><b>pickup_points<\/b><\/td>\n<td>id, nama, keterangan, jam_operasional<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div class=\"business-note\"><b>Aturan keamanan (Security Rules) ringkas:<\/b> hanya pengguna login yang boleh membaca data; laporan hanya bisa diubah atau dihapus oleh pembuatnya atau admin; klaim hanya bisa dibaca oleh pengklaim dan pelapor; hanya admin yang boleh mengelola titik serah.<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Alur Utama &amp; Arsitektur Arsitektur aplikasi Aplikasi dikembangkan dengan pola MVVM (Model-View-ViewModel) pada klien Android native (Kotlin). Pola ini memisahkan antarmuka pengguna (Presentation Layer), logika pengolahan data (ViewModel), dan sumber data (Data Layer), sehingga pengembangan lebih rapi dan mudah dipelihara. Seluruh aliran data jarak jauh bertumpu pada layanan Firebase (Authentication, Firestore, dan Storage), sedangkan penyimpanan [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-info-detail.php","meta":{"footnotes":""},"class_list":["post-55","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/kelompok5.tibcore.my.id\/index.php?rest_route=\/wp\/v2\/pages\/55","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kelompok5.tibcore.my.id\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/kelompok5.tibcore.my.id\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/kelompok5.tibcore.my.id\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kelompok5.tibcore.my.id\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=55"}],"version-history":[{"count":0,"href":"https:\/\/kelompok5.tibcore.my.id\/index.php?rest_route=\/wp\/v2\/pages\/55\/revisions"}],"wp:attachment":[{"href":"https:\/\/kelompok5.tibcore.my.id\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=55"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}