# Panduan Gaya Kode Dokumen ini mencatat konvensi penulisan kode di proyek ini, supaya kontributor (termasuk AI assistant) mengikuti pola yang sama dan tidak menulis ulang solusi yang sudah ada dengan cara berbeda-beda di tiap file. Setiap bagian punya status: - ✅ **Selesai** — sudah diterapkan di seluruh kode yang relevan. - 🚧 **Sebagian** — sudah ada polanya, tapi belum diterapkan di semua tempat. - 📝 **Rencana** — baru berupa kesepakatan, belum diterapkan. --- ## 1. Enum ✅ **Aturan:** setiap backed enum (`enum X: string`) wajib pakai trait `App\Enums\Concerns\HasValues`. Jangan pernah menulis `array_values(X::cases())` atau `array_column(X::cases(), 'value')` secara manual — pakai `X::values()` (atau `X::options()` kalau butuh label untuk dropdown/select). ```php // app/Enums/Concerns/HasValues.php trait HasValues { public static function values(): array // ['male', 'female'] public static function options(): array // [{value: 'male', label: 'Laki-laki'}, ...] } ``` Struktur enum standar: ```php enum Gender: string { use HasValues; case Male = 'male'; case Female = 'female'; public function label(): string { return match ($this) { self::Male => 'Laki-laki', self::Female => 'Perempuan', }; } } ``` **Sebelum → Sesudah** ```php // ❌ Jangan 'gender' => ['required', 'string', Rule::in(array_values(Gender::cases()))], 'type' => ['required', 'string', Rule::in(array_column(FeedbackType::cases(), 'value'))], // ✅ Pakai 'gender' => ['required', 'string', Rule::in(Gender::values())], 'type' => ['required', 'string', Rule::in(FeedbackType::values())], ``` Untuk data yang dikirim ke frontend (mis. isi `