@extends('docs.layout') @section('title', 'Arsitektur & Database') @section('breadcrumb') @endsection @section('page_header') Arsitektur Sistem

Arsitektur & Skema Database

Penjelasan struktur direktori kode sumber, pola arsitektur MVC framework Laravel 10, daftar file Controller & Model, serta relasi skema database (ERD) 15 tabel.

@endsection @section('content')

1. Pola Arsitektur MVC

Sistem Informasi SSE dibangun di atas framework Laravel 10 (PHP 8.1+) dengan mengadopsi standar arsitektur Model-View-Controller (MVC). Pemisahan tugas diimplementasikan secara jelas:

2. Pemetaan Struktur Direktori

Berikut adalah rincian folder utama proyek dan perannya dalam aplikasi:

Path Direktori / File Fungsi & Cakupan
app/Http/Controllers/Admin/ Tempat berkumpulnya 11 Controller utama yang menangani seluruh operasi CRUD dan logika validasi per modul admin.
app/Http/Controllers/AuthController.php Menangani alur autentikasi login berbasis username, lockout rate limiter, dan logout.
app/Http/Middleware/RoleMiddleware.php Guard middleware yang mencegat request dan memastikan pengguna memiliki role yang sesuai sebelum mengakses modul tertentu (mencegah error 403 Forbidden).
app/Models/ Menyimpan 11 class Eloquent Model yang mendefinisikan casting tipe data, fillable attributes, dan relasi database antar tabel.
database/migrations/ Kumpulan 23 file migrasi skema database yang mendefinisikan struktur tabel, kolom, index, dan foreign key constraints.
database/seeders/ Berisi seeder awal master data (DatabaseSeeder.php dan UnitSeeder.php untuk inisialisasi 16+ satuan standar).
resources/views/admin/ Berisi 47 file Blade view yang dikelompokkan ke dalam sub-folder tiap modul (projects, rab, purchases, usages, stocks, paid-wages, items, vendors, units, users).
resources/views/admin/partials/ Komponen reusable seperti header navbar (header.blade.php), flash toast notifications (toast_messages.blade.php), dan section lampiran polymorphic (project_files_section.blade.php).
resources/views/layouts/app.blade.php Master layout panel admin berbasis tema Sneat (warna utama hijau #16a34a) yang memuat sidebar menu, navbar, script modal z-index handler, dan assets bundle.
resources/views/docs/ Pusat dokumentasi internal sistem yang terintegrasi langsung dengan framework Blade dan diproteksi akses login admin.

3. Daftar Controller & Peran Logika

Rincian peran dari 11 Controller admin yang menggerakkan sistem:

Nama Controller Tanggung Jawab Logika Utama
DashboardController.php Mengalkulasi metrik agregat di beranda (Total Proyek, Total Realisasi Belanja, Total Upah, Total Budget RAP) serta merender progress bar per proyek aktif.
ProjectController.php Manajemen CRUD Proyek dan penyediaan halaman Detail Proyek dengan navigasi Tab horizontal ERP.
RabController.php Modul RAB: Kalkulasi anggaran terpadu (Upah & Material), auto-suggest AJAX per kategori, parsing impor Excel RAP multi-level, download template Excel, dan cetak print view.
PurchaseController.php Barang Masuk: Dynamic multi-row input, validasi batas sisa anggaran RAB Material, auto-create master on-the-fly, dan edit transaksi dengan rekalkulasi budget efektif.
UsageController.php Barang Keluar: Dynamic multi-row input, validasi stok fisik ketersediaan barang, dan edit transaksi dengan rekalkulasi stok efektif.
StockController.php Monitoring Stok: Agregasi saldo berjalan per material, tabel buku besar (ledger) kronologis per transaksi masuk/keluar, dan cetak laporan stok resmi.
PaidWageController.php Upah Terbayar: Pencatatan realisasi upah tukang, pemetaan ke uraian pekerjaan RAB Upah, persentase realisasi anggaran upah, dan cetak laporan upah.
ProjectFileController.php Manajemen File: Upload file lampiran polymorphic, hapus file & record, download stream, dan in-page modal preview (PDF & Gambar).
ItemController.php CRUD Master Material, auto-generated kode barang, relasi kategori dan satuan master.
VendorController.php CRUD Master Vendor/Pemasok material beserta kontak dan alamat.
UnitController.php CRUD Master Satuan (m3, m2, kg, zak, btg, dll) yang tersinkronisasi ke seluruh dropdown sistem.
RabCategoryController.php CRUD Kategori Pekerjaan RAB (Persiapan, Tanah, Pondasi, Struktur Beton, dll).
UserController.php Manajemen Pengguna (Admin only): Create/edit user, ganti password, ganti role, upload foto profil, dan pemantauan waktu login terakhir.

4. Skema Database & Relasi Eloquent (ERD)

Database sistem terdiri dari 15 tabel utama yang saling berelasi erat:

Nama Tabel Model Terkait Foreign Keys & Relasi Eloquent
projects Project hasMany(Rab), hasMany(Purchase), hasMany(Usage), hasMany(PaidWage), hasMany(ProjectFile)
rabs Rab project_idprojects.id (Cascade Delete).
hasMany(RabDetail)
rab_details RabDetail rab_idrabs.id (Cascade Delete).
rab_category_idrab_categories.id (Nullable).
morphMany(ProjectFile, 'fileable')
purchases Purchase project_idprojects.id, vendor_idvendors.id.
hasMany(PurchaseDetail), morphMany(ProjectFile, 'fileable')
purchase_details PurchaseDetail purchase_idpurchases.id (Cascade Delete).
item_iditems.id, unit_idunits.id (Nullable).
usages Usage project_idprojects.id.
hasMany(UsageDetail), morphMany(ProjectFile, 'fileable')
usage_details UsageDetail usage_idusages.id (Cascade Delete).
item_iditems.id, unit_idunits.id (Nullable).
paid_wages PaidWage project_idprojects.id.
rab_detail_idrab_details.id (Nullable).
items Item item_category_iditem_categories.id.
unit_idunits.id (Nullable).
project_files ProjectFile project_idprojects.id.
Polymorphic: fileable_id & fileable_type (merujuk ke Project, Purchase, Usage, atau RabDetail).
vendors Vendor hasMany(Purchase)
units Unit hasMany(Item), hasMany(PurchaseDetail), hasMany(UsageDetail)
item_categories ItemCategory hasMany(Item)
rab_categories RabCategory hasMany(RabDetail)
users User Menyimpan credential login, role (enum/string), photo_path, dan last_login_at.

5. Standar Komponen & Konvensi Frontend

@endsection