diff --git a/app/Http/Controllers/Admin/FeedbackController.php b/app/Http/Controllers/Admin/FeedbackController.php index a91fc42..23f1b69 100644 --- a/app/Http/Controllers/Admin/FeedbackController.php +++ b/app/Http/Controllers/Admin/FeedbackController.php @@ -15,7 +15,9 @@ class FeedbackController extends Controller { - public function __construct(private readonly FeedbackService $service) {} + public function __construct( + private readonly FeedbackService $service, + ) {} public function index(PaginatedRequest $request): Response { diff --git a/app/Http/Controllers/Admin/Manage/CourseController.php b/app/Http/Controllers/Admin/Manage/CourseController.php index 1bc5c12..69c3fc6 100644 --- a/app/Http/Controllers/Admin/Manage/CourseController.php +++ b/app/Http/Controllers/Admin/Manage/CourseController.php @@ -7,7 +7,7 @@ use App\Http\Requests\PaginatedRequest; use App\Models\Course; use App\Services\Admin\Manage\CourseService; -use App\Services\Admin\Users\DepartmentService; +use App\Services\Admin\Master\DepartmentService; use Illuminate\Http\RedirectResponse; use Inertia\Inertia; use Inertia\Response; diff --git a/app/Http/Controllers/Admin/Manage/MaterialController.php b/app/Http/Controllers/Admin/Manage/MaterialController.php index 90969aa..f12a842 100644 --- a/app/Http/Controllers/Admin/Manage/MaterialController.php +++ b/app/Http/Controllers/Admin/Manage/MaterialController.php @@ -49,8 +49,6 @@ public function destroy(Material $material): RedirectResponse { $this->service->delete($material); - Inertia::flash('toast', ['type' => 'success', 'message' => 'Materi berhasil dihapus.']); - - return back(); + return Inertia::flash('toast', ['type' => 'success', 'message' => 'Materi berhasil dihapus.'])->back(); } } diff --git a/app/Http/Controllers/Admin/Manage/ScheduleController.php b/app/Http/Controllers/Admin/Manage/ScheduleController.php index ab2f482..4d6a724 100644 --- a/app/Http/Controllers/Admin/Manage/ScheduleController.php +++ b/app/Http/Controllers/Admin/Manage/ScheduleController.php @@ -48,8 +48,6 @@ public function destroy(Schedule $schedule): RedirectResponse { $this->service->delete($schedule); - Inertia::flash('toast', ['type' => 'success', 'message' => 'Jadwal berhasil dihapus.']); - - return back(); + return Inertia::flash('toast', ['type' => 'success', 'message' => 'Jadwal berhasil dihapus.'])->back(); } } diff --git a/app/Http/Controllers/Admin/Manage/TuitionInvoiceController.php b/app/Http/Controllers/Admin/Manage/TuitionInvoiceController.php index d38d696..776238c 100644 --- a/app/Http/Controllers/Admin/Manage/TuitionInvoiceController.php +++ b/app/Http/Controllers/Admin/Manage/TuitionInvoiceController.php @@ -52,8 +52,6 @@ public function destroy(TuitionInvoice $tuitionInvoice): RedirectResponse { $this->service->delete($tuitionInvoice); - Inertia::flash('toast', ['type' => 'success', 'message' => 'Tagihan berhasil dihapus.']); - - return back(); + return Inertia::flash('toast', ['type' => 'success', 'message' => 'Tagihan berhasil dihapus.'])->back(); } } diff --git a/app/Http/Controllers/Admin/Master/AcademicTermController.php b/app/Http/Controllers/Admin/Master/AcademicTermController.php index 1af7822..88be15b 100644 --- a/app/Http/Controllers/Admin/Master/AcademicTermController.php +++ b/app/Http/Controllers/Admin/Master/AcademicTermController.php @@ -14,7 +14,7 @@ class AcademicTermController extends Controller { public function __construct( - private readonly AcademicTermService $service + private readonly AcademicTermService $service, ) {} public function index(PaginatedRequest $request): Response @@ -33,18 +33,18 @@ public function store(AcademicTermRequest $request): RedirectResponse return to_route('admin.master.academic-terms.index'); } - public function update(AcademicTermRequest $request, AcademicTerm $AcademicTerm): RedirectResponse + public function update(AcademicTermRequest $request, AcademicTerm $academicTerm): RedirectResponse { - $this->service->update($AcademicTerm, $request->validated()); + $this->service->update($academicTerm, $request->validated()); Inertia::flash('toast', ['type' => 'success', 'message' => 'Periode akademik berhasil diperbarui.']); return to_route('admin.master.academic-terms.index'); } - public function destroy(AcademicTerm $AcademicTerm): RedirectResponse + public function destroy(AcademicTerm $academicTerm): RedirectResponse { - $this->service->delete($AcademicTerm); + $this->service->delete($academicTerm); return Inertia::flash('toast', ['type' => 'success', 'message' => 'Periode akademik berhasil dihapus.'])->back(); } diff --git a/app/Http/Controllers/Admin/Master/DepartmentController.php b/app/Http/Controllers/Admin/Master/DepartmentController.php index 6496271..19b12ab 100644 --- a/app/Http/Controllers/Admin/Master/DepartmentController.php +++ b/app/Http/Controllers/Admin/Master/DepartmentController.php @@ -14,7 +14,7 @@ class DepartmentController extends Controller { public function __construct( - private readonly DepartmentService $service + private readonly DepartmentService $service, ) {} public function index(PaginatedRequest $request): Response diff --git a/app/Http/Controllers/Admin/Settings/ProfileController.php b/app/Http/Controllers/Admin/Settings/ProfileController.php index c57ab8a..33c6b20 100644 --- a/app/Http/Controllers/Admin/Settings/ProfileController.php +++ b/app/Http/Controllers/Admin/Settings/ProfileController.php @@ -15,9 +15,6 @@ class ProfileController extends Controller { - /** - * Show the user's profile settings page. - */ public function edit(Request $request): Response { $user = $request->user(); @@ -37,9 +34,6 @@ public function edit(Request $request): Response ]); } - /** - * Update the user's profile information. - */ public function update(ProfileUpdateRequest $request): RedirectResponse { $user = $request->user(); @@ -61,9 +55,6 @@ public function update(ProfileUpdateRequest $request): RedirectResponse return to_route('admin.settings.profile.edit'); } - /** - * Delete the user's profile. - */ public function destroy(ProfileDeleteRequest $request): RedirectResponse { $user = $request->user(); diff --git a/app/Http/Controllers/Admin/Settings/SecurityController.php b/app/Http/Controllers/Admin/Settings/SecurityController.php index de8acc8..9909e66 100644 --- a/app/Http/Controllers/Admin/Settings/SecurityController.php +++ b/app/Http/Controllers/Admin/Settings/SecurityController.php @@ -11,9 +11,6 @@ class SecurityController extends Controller { - /** - * Show the user's security settings page. - */ public function edit(): Response { return Inertia::render('admin/settings/security', [ @@ -21,17 +18,12 @@ public function edit(): Response ]); } - /** - * Update the user's password. - */ public function update(PasswordUpdateRequest $request): RedirectResponse { $request->user()->update([ 'password' => $request->password, ]); - Inertia::flash('toast', ['type' => 'success', 'message' => 'Kata sandi berhasil diperbarui.']); - - return back(); + return Inertia::flash('toast', ['type' => 'success', 'message' => 'Kata sandi berhasil diperbarui.'])->back(); } } diff --git a/app/Http/Controllers/Admin/Users/AdministratorController.php b/app/Http/Controllers/Admin/Users/AdministratorController.php index 99cf316..0818188 100644 --- a/app/Http/Controllers/Admin/Users/AdministratorController.php +++ b/app/Http/Controllers/Admin/Users/AdministratorController.php @@ -15,7 +15,7 @@ class AdministratorController extends Controller { public function __construct( - protected AdministratorService $service, + private readonly AdministratorService $service, ) {} public function index(Request $request): Response diff --git a/app/Http/Controllers/Admin/Users/LecturerController.php b/app/Http/Controllers/Admin/Users/LecturerController.php index fb217f2..8c6c1a3 100644 --- a/app/Http/Controllers/Admin/Users/LecturerController.php +++ b/app/Http/Controllers/Admin/Users/LecturerController.php @@ -5,7 +5,7 @@ use App\Http\Controllers\Controller; use App\Http\Requests\Admin\Users\LecturerRequest; use App\Models\User; -use App\Services\Admin\Users\DepartmentService; +use App\Services\Admin\Master\DepartmentService; use App\Services\Admin\Users\LecturerService; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; @@ -15,8 +15,8 @@ class LecturerController extends Controller { public function __construct( - protected LecturerService $service, - protected DepartmentService $departmentService, + private readonly LecturerService $service, + private readonly DepartmentService $departmentService, ) {} public function index(Request $request): Response diff --git a/app/Http/Controllers/Admin/Users/StudentController.php b/app/Http/Controllers/Admin/Users/StudentController.php index 7a915b5..a55b6e3 100644 --- a/app/Http/Controllers/Admin/Users/StudentController.php +++ b/app/Http/Controllers/Admin/Users/StudentController.php @@ -5,7 +5,7 @@ use App\Http\Controllers\Controller; use App\Http\Requests\Admin\Users\StudentRequest; use App\Models\User; -use App\Services\Admin\Users\DepartmentService; +use App\Services\Admin\Master\DepartmentService; use App\Services\Admin\Users\LecturerService; use App\Services\Admin\Users\StudentService; use Illuminate\Http\RedirectResponse; @@ -16,9 +16,9 @@ class StudentController extends Controller { public function __construct( - protected StudentService $service, - protected DepartmentService $departmentService, - protected LecturerService $lecturerService, + private readonly StudentService $service, + private readonly DepartmentService $departmentService, + private readonly LecturerService $lecturerService, ) {} public function index(Request $request): Response diff --git a/app/Services/Admin/Users/DepartmentService.php b/app/Services/Admin/Users/DepartmentService.php deleted file mode 100644 index 67cf55f..0000000 --- a/app/Services/Admin/Users/DepartmentService.php +++ /dev/null @@ -1,14 +0,0 @@ -get(); - } -} diff --git a/docs/code-style.md b/docs/code-style.md new file mode 100644 index 0000000..2b4315a --- /dev/null +++ b/docs/code-style.md @@ -0,0 +1,155 @@ +# 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 `