πŸ”₯ Firebase Integration Guide

Sistem PERENCANAAN DINKES NATUNA β€” Setup Panduan Integrasi Firebase Backend

πŸ“ Struktur File

project/
β”œβ”€β”€ preview.html ← Aplikasi utama
β”œβ”€β”€ firebase-config.js ← Konfigurasi Firebase (NEW)
β”œβ”€β”€ firestore-service.js ← Service layer Firestore (NEW)
β”œβ”€β”€ auth-service.js ← Service layer Auth (NEW)
β”œβ”€β”€ firebase-bridge.js ← Bridge integrasi (NEW)
β”œβ”€β”€ firestore.rules ← Security Rules (NEW)
└── firebase-setup-guide.html ← Panduan ini (NEW)

Langkah 1: Buat Project Firebase

  1. Buka Firebase Console
  2. Klik "Add project" β†’ beri nama: dinkes-natuna
  3. Disable Google Analytics (opsional) β†’ klik Create Project
  4. Setelah selesai, klik Continue

Langkah 2: Buat Web App

  1. Di Firebase Console, klik ikon </> (Web)
  2. Beri nama: dinkes-natuna-web
  3. Klik "Register app"
  4. Copy konfigurasi yang diberikan
  5. Tempel ke firebase-config.js β†’ ganti nilai YOUR_*
// Contoh konfigurasi yang sudah terisi:
const FIREBASE_CONFIG = {
  apiKey: "AIzaSyB...",
  authDomain: "dinkes-natuna.firebaseapp.com",
  projectId: "dinkes-natuna",
  storageBucket: "dinkes-natuna.appspot.com",
  messagingSenderId: "123456789",
  appId: "1:123456789:web:abc123"
};

Langkah 3: Enable Authentication

  1. Di Firebase Console β†’ Authentication β†’ Get started
  2. Tab Sign-in method β†’ Enable Email/Password
  3. Tab Users β†’ klik "Add user" untuk membuat akun awal:
RoleEmailPasswordCatatan
Adminadmin@dinkes.go.idadmin123Super admin akses penuh
Verifikatorverifikator@dinkes.go.idverif123Validasi laporan
Userpuskesmas@example.comuser123Petugas pelapor
⚠️ Setelah membuat akun di Firebase Console, buat document di Firestore collection users dengan ID = UID akun Firebase, dan isi field role dengan salah satu: super_admin, admin, verifikator, user_puskesmas

Langkah 4: Setup Cloud Firestore

  1. Di Firebase Console β†’ Firestore Database β†’ Create database
  2. Pilih "Start in test mode" (untuk development)
  3. Pilih region terdekat: asia-southeast1 (Singapore)
  4. Click Enable

Deploy Security Rules

Buka Firestore Rules β†’ Paste isi dari firestore.rules β†’ Klik Publish

Buat Collections Awal

Berikut collections yang akan digunakan otomatis oleh aplikasi:

CollectionDeskripsiOtomatis?
usersProfil pengguna dengan roleManual
puskesmasData profil puskesmasOtomatis
programsDaftar program kesehatanManual
laporanSemua laporan kesehatanOtomatis
dokumen_laporanMetadata dokumen pendukungOtomatis
log_aktivitasAudit trail aktivitasOtomatis
notifikasiNotifikasi ke penggunaOtomatis
penyimpananBackup data per kategoriOtomatis

Langkah 5: Enable Firebase Storage

  1. Di Firebase Console β†’ Storage β†’ Get started
  2. Start in test mode β†’ Select region
  3. Deploy Storage Rules (dari firestore.rules bagian Storage)
rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /dokumen_laporan/{laporanId}/{fileName} {
      allow read: if request.auth != null;
      allow write: if request.auth != null
        && request.resource.size < 10 * 1024 * 1024
        && request.resource.contentType.matches('image/.*|application/pdf|application/msword|application/vnd.openxmlformats-officedocument.*');
    }
  }
}

Langkah 6: Integrasikan ke preview.html

Tambahkan berikut di <head> preview.html:

<!-- Firebase SDK -->
<script src="https://www.gstatic.com/firebasejs/9.23.0/firebase-app-compat.js"></script>
<script src="https://www.gstatic.com/firebasejs/9.23.0/firebase-auth-compat.js"></script>
<script src="https://www.gstatic.com/firebasejs/9.23.0/firebase-firestore-compat.js"></script>
<script src="https://www.gstatic.com/firebasejs/9.23.0/firebase-storage-compat.js"></script>

<!-- Firebase Services -->
<script src="firebase-config.js"></script>
<script src="auth-service.js"></script>
<script src="firestore-service.js"></script>
<script src="firebase-bridge.js"></script>

Langkah 7: Modifikasi Login Flow

Ganti fungsi doLogin() di preview.html:

// LAMA (localStorage):
function doLogin() {
  var user = findUser(selectedRole, username);
  if (user && user.password === password) { ... }
}

// BARU (Firebase):
async function doLogin() {
  var email = document.getElementById('loginUsername').value;
  var password = document.getElementById('loginPassword').value;
  
  try {
    var user = await FirebaseBridge.login(email, password);
    var profile = await FirestoreService.getUserProfile(user.uid);
    currentUser = { uid: user.uid, ...profile };
    applyRoleAccess();
  } catch (error) {
    document.getElementById('loginError').textContent = error.message;
  }
}

Alur Data Lengkap

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  
  │────▢│   FIRESTORE DB    │◀────│    Super Admin    β”‚
β”‚                  β”‚     β”‚                   β”‚     β”‚                    β”‚
β”‚ 1. Isi laporan   β”‚     β”‚  laporan: {       β”‚     β”‚ 1. Lihat laporan   β”‚
β”‚ 2. Simpan draft  │────▢│    status: draft  β”‚     β”‚ 2. Cek dokumen     β”‚
β”‚ 3. Kirim laporan │────▢│    status: menunggu    β”‚ 3. Verifikasi       β”‚
β”‚ 4. Lihat status  │◀────│    status: terverif│◀───│ 4. Setujui/Tolak   β”‚
β”‚ 5. Perbaiki      │────▢│    status: perlu_  β”‚     β”‚ 5. Minta perbaikan β”‚
β”‚                  β”‚     β”‚    perbaikan       β”‚     β”‚                    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
         β”‚                        β”‚                         β”‚
         β–Ό                        β–Ό                         β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  NOTIFIKASI      β”‚     β”‚  LOG AKTIVITAS   β”‚     β”‚  DOKUMEN           β”‚
β”‚  - Laporan baru  β”‚     β”‚  - Login          β”‚     β”‚  - Upload file     β”‚
β”‚  - Status update β”‚     β”‚  - Kirim/Cek      β”‚     β”‚  - Validasi file   β”‚
β”‚  - Perlu perbaik β”‚     β”‚  - Verifikasi     β”‚     β”‚  - Status dokumen  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

βœ… Yang Sudah Disiapkan

⚠️ Yang Perlu Dilakukan

  1. Ganti YOUR_* di firebase-config.js dengan konfigurasi Firebase project Anda
  2. Buat akun pengguna di Firebase Console β†’ Authentication
  3. Buat document users di Firestore untuk setiap akun dengan field role
  4. Deploy Security Rules dari firestore.rules
  5. Modifikasi doLogin() di preview.html untuk menggunakan Firebase Auth
  6. Ganti localStorage calls dengan FirebaseBridge calls

Cara Menambahkan User Baru

Method 1: Firebase Console (Manual)

  1. Authentication β†’ Users β†’ Add user β†’ Email/Password
  2. Copy UID dari user baru
  3. Firestore β†’ Collection users β†’ Add document
  4. Document ID = UID Firebase Auth
  5. Isi fields:
    {
      "username": "petugas_ranai",
      "email": "petugas@ranai.go.id",
      "displayName": "Petugas Puskesmas Ranai",
      "role": "user_puskesmas",
      "puskesmas": "Puskesmas Ranai",
      "noHp": "08123456789"
    }

Method 2: Dari Aplikasi (Admin)

Menu Pengaturan β†’ Manajemen Akun β†’ Isi form β†’ Klik Daftar

Ini akan otomatis membuat akun di Firebase Auth + document di Firestore

Mapping Role β†’ Menu Akses

MenuπŸ›‘οΈ Super AdminπŸ›‘οΈ Adminβœ… VerifikatorπŸ‘€ User Puskesmas
Dashboardβœ… Ringkasan Kabupatenβœ… Ringkasan Kabupatenβœ… Status Verifikasiβœ… Statistik Internal
Data Umumβœ… Fullβœ… Fullβœ… Validasi Dataβœ… Input Profil
KESGAβœ… Fullβœ… Fullβœ… Review Laporanβœ… Input Laporan
P2Pβœ… Fullβœ… Fullβœ… Review Laporanβœ… Input Laporan
SDKβœ… Fullβœ… Fullβœ… Review Laporanβœ… Input Laporan
Yankesβœ… Fullβœ… Fullβœ… Review Laporanβœ… Input Laporan
βœ… Verifikasiβœ… Fullβœ… Fullβœ… Validasi❌ Locked
πŸ—ƒοΈ Penyimpananβœ… Backup/Restoreβœ… Backup/Restoreβœ… Arsip Terverifikasiβœ… Simpan Draft
βš™οΈ Pengaturanβœ… Fullβœ… Fullβœ… Notifikasiβœ… Akun Saja