Struktur Folder & Best Practices

Struktur Folder dan Best Practices

Di lesson ini kita akan mempelajari cara mengorganisir kode di Laravel agar project tetap rapi saat semakin besar.

Mengapa Struktur Folder Penting?

Bayangkan lemari arsip rumah sakit:

Tanpa Organisasi
Semua rekam medis dicampur dalam 1 rak. Butuh 30 menit cari 1 file.
Dengan Organisasi
Ada rak Rawat Jalan, Rawat Inap, Farmasi. Butuh 30 detik cari file.

Sama dengan kode - dengan struktur yang baik, Anda bisa langsung tahu "file X ada di folder Y".
Tipe: [TEORI - TIDAK ADA KODE]

Lesson ini adalah referensi untuk memahami organisasi kode. Anda tidak perlu membuat file di lesson ini - semua file akan dibuat secara bertahap di section-section berikutnya.

Step 1: Struktur Folder Backend (app/)

Lokasi: app/
Tipe: [REFERENSI - TIDAK PERLU DIBUAT]
Fungsi: Berisi semua logic backend - Controllers, Models, Helpers
app/
├── Http/
│   ├── Controllers/
│   │   ├── Auth/                  # [v] Sudah ada (Breeze)
│   │   ├── DashboardController.php # [v] Section 1
│   │   ├── Master/                # [+] Section 2: Master Data
│   │   │   ├── PoliklinikController.php
│   │   │   ├── DokterController.php
│   │   │   ├── JadwalPraktekController.php
│   │   │   └── ObatController.php
│   │   ├── PasienController.php   # [+] Section 3
│   │   ├── PendaftaranController.php # [+] Section 4
│   │   ├── AntrianController.php
│   │   ├── DokterDashboardController.php # [+] Section 5
│   │   ├── FarmasiController.php  # [+] Section 6
│   │   ├── KasirController.php    # [+] Section 7
│   │   └── RawatInapController.php # [+] Section 8
│   │
│   └── Middleware/
│       └── RoleMiddleware.php     # [v] Section 1 (Spatie)
│
├── Models/
│   ├── User.php                   # [v] Sudah ada
│   ├── Poliklinik.php             # [+] Section 2
│   ├── Dokter.php
│   ├── JadwalPraktek.php
│   ├── Obat.php
│   ├── Pasien.php                 # [+] Section 3-4
│   ├── Kunjungan.php
│   ├── Antrian.php
│   ├── RekamMedis.php             # [+] Section 5
│   ├── Resep.php                  # [+] Section 6
│   ├── Billing.php                # [+] Section 7
│   └── RawatInap.php              # [+] Section 8
│
└── Helpers/
    └── AppHelper.php              # [v] Section 1
Keterangan Simbol:

[v] File sudah dibuat (di section sebelumnya atau bawaan Laravel)
[+] File akan dibuat di section yang disebutkan

Step 2: Struktur Folder Views (resources/views/)

Lokasi: resources/views/
Tipe: [REFERENSI - TIDAK PERLU DIBUAT]
Fungsi: Berisi semua tampilan UI - file Blade templates
resources/views/
├── layouts/
│   └── simrs.blade.php            # [v] Section 1: Master layout
│
├── dashboard.blade.php            # [v] Section 1
│
├── auth/                          # [v] Sudah ada (Breeze)
│   ├── login.blade.php
│   └── register.blade.php
│
├── master/                        # [+] Section 2
│   ├── poliklinik/
│   │   └── index.blade.php
│   ├── dokter/
│   │   └── index.blade.php
│   ├── jadwal/
│   │   └── index.blade.php
│   └── obat/
│       └── index.blade.php
│
├── pasien/                        # [+] Section 3-4
│   ├── index.blade.php
│   ├── create.blade.php
│   └── show.blade.php
│
├── pendaftaran/
│   ├── index.blade.php
│   └── create.blade.php
│
├── antrian/
│   ├── panel.blade.php            # Panel pemanggilan (untuk perawat)
│   ├── display.blade.php          # Display TV (untuk pasien)
│   └── kiosk.blade.php            # Mesin antrian self-service
│
├── dokter/                        # [+] Section 5
│   ├── dashboard.blade.php
│   ├── periksa.blade.php
│   └── rekam-medis.blade.php
│
├── farmasi/                       # [+] Section 6
│   └── index.blade.php
│
├── kasir/                         # [+] Section 7
│   └── index.blade.php
│
└── rawat-inap/                    # [+] Section 8
    ├── index.blade.php
    └── bed-management.blade.php
Tips Organisasi Views:

1 Controller = 1 Folder PoliklinikControllerviews/master/poliklinik/
CRUD Views Biasanya: index, create, edit, show
Partial Views Awali dengan underscore: _form.blade.php

Step 3: Naming Convention (Aturan Penamaan)

Tipe: [TEORI - TIDAK ADA KODE]
Fungsi: Aturan penamaan yang konsisten agar kode mudah dibaca
Aturan Penamaan Laravel:
Jenis Format Contoh
Model PascalCase, Singular Pasien, RekamMedis
Tabel Database snake_case, Plural pasiens, rekam_medis
Controller PascalCase + Controller PasienController
Migration snake_case dengan timestamp 2024_01_01_create_pasiens_table
View kebab-case atau snake_case rekam-medis.blade.php
Route Name dot notation pasien.index, pasien.store

Step 4: Best Practices untuk SIMRS

Tipe: [TEORI - TIDAK ADA KODE]
Fungsi: Tips dan trik untuk membangun aplikasi yang maintainable
1. Eager Loading Selalu gunakan with() untuk load relasi sekaligus.
Buruk: Pasien::all() lalu loop $pasien->kunjungan
Baik: Pasien::with('kunjungan')->get()
2. Form Request Validasi di Form Request class, bukan di controller.
php artisan make:request StorePasienRequest
3. Resource Controller Gunakan 7 method standar: index, create, store, show, edit, update, destroy
Route::resource('pasien', PasienController::class)
4. AJAX Pattern Untuk SIMRS, kita pakai AJAX untuk update tanpa refresh halaman.
Selalu set CSRF token di header.
5. Soft Deletes Data medis tidak boleh dihapus permanen (regulasi).
Gunakan SoftDeletes trait di model.

Checkpoint - Verifikasi Pemahaman

Jawab pertanyaan berikut:

1. Di mana menyimpan file Controller untuk Pasien?
Jawaban: app/Http/Controllers/PasienController.php

2. Apa nama tabel database untuk Model RekamMedis?
Jawaban: rekam_medis (snake_case, sesuai nama model)

3. Di mana menyimpan view untuk halaman index Poliklinik?
Jawaban: resources/views/master/poliklinik/index.blade.php

4. Apa route name untuk method store di PasienController?
Jawaban: pasien.store

5. Mengapa pakai Soft Deletes untuk data medis?
Jawaban: Karena regulasi kesehatan mengharuskan data medis disimpan, tidak boleh dihapus permanen.

Ringkasan

Yang Sudah Dipelajari:

1. Struktur Folder Backend (app/):
- Controllers terpisah per fitur
- Models untuk setiap tabel database
- Helpers untuk fungsi utilitas

2. Struktur Folder Views (resources/views/):
- Layouts untuk template master
- Folder per modul (master/, pasien/, farmasi/)
- File blade dengan nama deskriptif

3. Naming Convention:
- Model: PascalCase, Singular
- Tabel: snake_case, Plural
- Controller: PascalCase + Controller

4. Best Practices:
- Eager Loading untuk performa
- Form Request untuk validasi
- Soft Deletes untuk data medis
Catatan:
Lesson ini adalah referensi. Anda tidak perlu membuat file apapun sekarang. Semua file akan dibuat bertahap di section-section berikutnya.
Lesson Berikutnya (Bonus):
Di Lesson 8: Bonus - Direct Login Flow, kita akan mengatur agar user langsung diarahkan ke halaman login saat membuka aplikasi.