Arsitektur struktur file dan folder untuk BIMA
bima/ # Root directory (di luar public_html jika memungkinkan)
│
├── public/ # 🌐 WEB ROOT (Document Root / public_html)
│ ├── .htaccess # Rules: Tolak akses langsung ke file/folder lain, redirect semua ke index.php
│ ├── index.php # 🚪 PINTU MASUK UTAMA (Front Controller untuk Normal Mode)
│ ├── rescue.php # 🚪 PINTU MASUK DARURAT (Front Controller khusus Rescue Mode)
│ └── assets/ # File statis global (CSS framework, JS global, logo, favicon)
│ ├── css/
│ ├── js/
│ └── images/
│
├── core/ # 🏛️ KERNEL & CORE SERVICES (Kode Inti / "Pemerintah")
│ ├── Kernel/ # Bootstrap, Router, Request/Response, Autoloader
│ │ ├── Bootstrap.php # Memuat config, menentukan mode, inisialisasi dasar
│ │ ├── Router.php # Menerjemahkan URL ke Modul/Controller/Aksi
│ │ ├── Request.php # Abstraksi $_GET, $_POST, $_SERVER, $_FILES
│ │ └── Response.php # Abstraksi output (HTML, JSON, Redirect)
│ │
│ ├── Services/ # Layanan Pusat (Wajib dipakai modul, tidak boleh di-bypass)
│ │ ├── AccessControl.php # RBAC, Scope, Policy Evaluation
│ │ ├── WorkflowEngine.php # Approval, Verify, Reject, Delegasi
│ │ ├── AuditTrail.php # Pencatatan log aksi (immutable)
│ │ ├── DatabaseManager.php # Koneksi, Uji 6-Level, Migrasi, Backup
│ │ ├── ModuleRegistry.php # Membaca manifest, mendaftarkan modul, sinkronisasi menu/izin
│ │ └── Notification.php # Queue dan dispatch notifikasi (email, WA, in-app)
│ │
│ ├── Security/ # Autentikasi, Session, CSRF, Enkripsi
│ │ ├── Auth.php # Login/Logout (Normal & Rescue)
│ │ ├── Session.php # Manajemen sesi (DB untuk normal, File untuk rescue)
│ │ └── Encryption.php # Helper untuk enkripsi kredensial rescue & config
│ │
│ ├── Database/ # Abstraksi Database (PDO Wrapper)
│ │ ├── Connection.php # Singleton/Pool koneksi
│ │ ├── QueryBuilder.php # (Opsional) Pembuat query sederhana agar tidak raw SQL di mana-mana
│ │ └── Migration.php # Engine untuk menjalankan file migrasi berurutan
│ │
│ └── Helpers/ # Fungsi utilitas global (format tanggal, rupiah, string)
│
├── modules/ # 🧩 MODUL BISNIS ("Penduduk" / Plug-and-Play)
│ ├── _template/ # 📋 Folder kosong berisi struktur baku (di-copy saat buat modul baru)
│ │
│ ├── maintenance/ # Contoh Modul 1: Maintenance (Work Order)
│ │ ├── manifest.json # 📜 KARTU IDENTITAS (Wajib: metadata, menu, izin, workflow)
│ │ ├── Controllers/ # Penanganan request (tipis, tanpa logika bisnis)
│ │ ├── Services/ # Logika bisnis murni modul ini
│ │ ├── Repositories/ # Query database khusus tabel modul ini
│ │ ├── Entities/ # Class representasi data (DTO)
│ │ ├── Views/ # Template HTML (PHP native atau template engine ringan)
│ │ ├── Database/
│ │ │ ├── Migrations/ # File SQL/PHP untuk buat/ubah tabel (berurutan)
│ │ │ └── Seeds/ # Data awal referensi
│ │ ├── Routes/ # Definisi routing khusus modul ini
│ │ ├── Assets/ # CSS/JS khusus modul ini (di-copy ke public saat install)
│ │ └── Lang/ # Terjemahan (id.json, en.json)
│ │
│ └── qc-inspection/ # Contoh Modul 2: QC Inspection
│ ├── manifest.json
│ └── ... (struktur sama dengan maintenance)
│
├── config/ # ⚙️ KONFIGURASI (Di luar public, tidak di-commit ke Git jika sensitif)
│ ├── .env # Variabel lingkungan (APP_KEY, DB_HOST, dll)
│ ├── app.php # Setting umum aplikasi (timezone, locale, base_url)
│ ├── database.php # Konfigurasi koneksi DB (Ditulis otomatis oleh DatabaseManager)
│ └── rescue.php # Konfigurasi akun rescue (Hash password, batas waktu)
│
├── storage/ # 💾 AREA TULIS (Wajib permission 755/775, TIDAK BOLEH bisa dieksekusi PHP)
│ ├── .htaccess # Rules: DENY ALL (Tolak akses langsung via browser)
│ │
│ ├── rescue_store/ # 🛟 PENYIMPANAN LOKAL RESCUE MODE
│ │ ├── encrypted_config.dat # Konfigurasi DB terenkripsi (untuk backup/restore)
│ │ ├── emergency_audit.log # Log audit saat DB mati (akan disync saat DB hidup)
│ │ └── session/ # File sesi khusus mode rescue
│ │
│ ├── logs/ # Log aplikasi, error PHP, audit trail (format JSON/CSV)
│ ├── cache/ # Cache query, cache izin RBAC, compiled views
│ ├── uploads/ # File upload user (dipisah per modul/tahun/bulan)
│ └── backups/ # Dump database otomatis/manual
│
└── vendor/ # 📦 DEPENDENSI EKSTERNAL (Jika pakai Composer)
└── ... # (Misal: library PDF generator, library Excel, dll)
Satu emoji cukup untuk bilang bahwa tulisan ini pernah menyentuh seseorang.
Catatan terkait
Visualisasi struktur rangka utama BIMA
Saya membaginya menjadi 4 diagram visual: Arsitektur Lapisan, Alur Permintaan (Request Flow), Pemisahan Mode (Normal vs Rescue), dan Siklus Plug and Play Modul. 1. Diagram Arsitektur Lapisan (Layered Architecture) Ini…
Ketika Kata Menjadi Tempat Berteduh
Ketika apa yang dirasakan akhirnya mewujud menjadi tulisan, ada rasa lega yang luar biasa. Seolah-olah dada yang tadinya sesak kini kembali mendapatkan ruang untuk bernapas lega.
Hobi Mainan Mini 4WD
Di pikiranku, ada "Tamiya merek Gokey", "Tamiya merek Auldey", dan "Tamiya merek Tamiya" (yang belakangan baru kuketahui sebagai merek asli pemegang lisensinya).