Arsitektur Database dan Model

Sistem Haflah dibangun dengan paradigma Relasional Database menggunakan ORM Eloquent di Laravel. Berikut penjelasan relasi (Relationships) antar Model / Tabel utama di dalam sistem ini.

1. Sistem Autentikasi & Otorisasi (RBAC)

  • Model Role (roles): Tabel master hak akses (Superadmin, Admin, Operator, Walikelas, Guest). Memiliki field is_staff (boolean) untuk membedakan antara staff (login ke /admin/login) dan tamu (login ke /login).
  • Model User (users): belongsTo(Role::class). Pengguna utama yang bisa melakukan autentikasi sistem. Data autentikasi tamu pun menggunakan tabel ini dengan role_id mengarah ke Guest. Memiliki nomor handphone yang diformat unik sebagai username untuk tamu.
  • Tabel role_permissions: Konfigurasi toggle "On/Off" untuk mengatur apakah role tertentu dapat melakukan tindakan tertentu (seperti event.view, event.edit). Data di-cache oleh Model User via Cache::remember guna performa tinggi.

2. Modul Event & Registrasi

  • Model Event (events): Pusat dari segala aktivitas. Acara yang dibuat memiliki status enum (draft, scheduled, active, completed).
  • Model Guest (guests): belongsTo(User::class). Profil detail dari seorang tamu, mencakup relasinya ke event (Many-to-Many via pivot tabel atau langsung dikaitkan). Data tamu bisa berasal dari sistem eksternal atau di-import.
  • Model AttendanceLog (attendance_logs): Menyimpan riwayat check-in (Scanner). Memiliki relasi belongsTo(Event::class) dan belongsTo(User::class, 'guest_id'). Rekaman mencatat waktu kedatangan.

3. Manajemen Konten

  • Model Post (posts): Tabel untuk menyimpan Berita / Artikel. Memiliki slug otomatis untuk SEO-friendly URL.
  • Model Gallery (galleries) & GalleryPhoto (gallery_photos): One-to-Many. Sebuah Album (Gallery) menampung banyak Foto. Jika Gallery diisi event_id, ia bersifat Private (hanya tamu event tersebut yang melihat di portal). Jika Null, bersifat Public (tampil di Halaman Depan).
  • Model Banner & Video: Komponen sederhana dengan sorting sort_order dan visibilitas is_active.

4. Konvensi Validasi Basis Data

  • Setiap input form wajib divalidasi oleh Request Validator pada Controller (atau Livewire Rules).
  • Penghapusan tabel induk yang berelasi memiliki onDelete('cascade') atau dibatasi onDelete('restrict') (Constraint) jika mengharuskan perlindungan data, contoh: Role tidak bisa dihapus jika masih ada User yang menggunakannya.
  • Semua password disimpan dalam bentuk hashed (Bcrypt) dan file upload disimpan di dalam disk storage/app/public/ dengan symlink (php artisan storage:link).