feat: Refactor Admin Manage structure into sub-namespaces for better organization
Some checks failed
tests / ci (pull_request) Has been cancelled

- Created sub-namespaces under Admin\Manage for Course, Academic, Announcement, Finance, and Service.
- Added new FormRequest classes for handling validation in each sub-namespace.
- Implemented Service classes for managing business logic related to each resource.
- Updated routes to reflect the new sub-namespace structure.
- Enhanced code organization and maintainability by grouping related functionalities.
This commit is contained in:
Yoga Pangestu 2026-08-25 21:17:48 +07:00
parent 9abd50f322
commit 353829e053
44 changed files with 112 additions and 90 deletions

View File

@ -1,13 +1,13 @@
<?php
namespace App\Http\Controllers\Admin\Manage;
namespace App\Http\Controllers\Admin\Manage\Academic;
use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\Manage\AssignmentRequest;
use App\Http\Requests\Admin\Manage\Academic\AssignmentRequest;
use App\Http\Requests\PaginatedRequest;
use App\Models\Assignment;
use App\Services\Admin\Manage\AssignmentService;
use App\Services\Admin\Manage\CourseClassService;
use App\Services\Admin\Manage\Academic\AssignmentService;
use App\Services\Admin\Manage\Course\CourseClassService;
use Illuminate\Http\RedirectResponse;
use Inertia\Inertia;
use Inertia\Response;

View File

@ -1,12 +1,12 @@
<?php
namespace App\Http\Controllers\Admin\Manage;
namespace App\Http\Controllers\Admin\Manage\Academic;
use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\Manage\AttendanceStoreRequest;
use App\Http\Requests\Admin\Manage\Academic\AttendanceStoreRequest;
use App\Models\CourseClass;
use App\Services\Admin\Manage\AttendanceService;
use App\Services\Admin\Manage\CourseClassService;
use App\Services\Admin\Manage\Academic\AttendanceService;
use App\Services\Admin\Manage\Course\CourseClassService;
use Illuminate\Http\RedirectResponse;
use Inertia\Inertia;
use Inertia\Response;

View File

@ -1,13 +1,13 @@
<?php
namespace App\Http\Controllers\Admin\Manage;
namespace App\Http\Controllers\Admin\Manage\Academic;
use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\Manage\CourseRegistrationRequest;
use App\Http\Requests\Admin\Manage\Academic\CourseRegistrationRequest;
use App\Http\Requests\PaginatedRequest;
use App\Models\CourseRegistration;
use App\Services\Admin\Manage\CourseClassService;
use App\Services\Admin\Manage\CourseRegistrationService;
use App\Services\Admin\Manage\Academic\CourseRegistrationService;
use App\Services\Admin\Manage\Course\CourseClassService;
use App\Services\Admin\Master\AcademicTermService;
use App\Services\Admin\Users\LecturerService;
use App\Services\Admin\Users\StudentService;

View File

@ -1,13 +1,13 @@
<?php
namespace App\Http\Controllers\Admin\Manage;
namespace App\Http\Controllers\Admin\Manage\Academic;
use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\Manage\MaterialRequest;
use App\Http\Requests\Admin\Manage\Academic\MaterialRequest;
use App\Http\Requests\PaginatedRequest;
use App\Models\Material;
use App\Services\Admin\Manage\CourseClassService;
use App\Services\Admin\Manage\MaterialService;
use App\Services\Admin\Manage\Academic\MaterialService;
use App\Services\Admin\Manage\Course\CourseClassService;
use Illuminate\Http\RedirectResponse;
use Inertia\Inertia;
use Inertia\Response;

View File

@ -1,12 +1,12 @@
<?php
namespace App\Http\Controllers\Admin\Manage;
namespace App\Http\Controllers\Admin\Manage\Academic;
use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\Manage\ScheduleRequest;
use App\Http\Requests\Admin\Manage\Academic\ScheduleRequest;
use App\Models\Schedule;
use App\Services\Admin\Manage\CourseClassService;
use App\Services\Admin\Manage\ScheduleService;
use App\Services\Admin\Manage\Academic\ScheduleService;
use App\Services\Admin\Manage\Course\CourseClassService;
use Illuminate\Http\RedirectResponse;
use Inertia\Inertia;
use Inertia\Response;

View File

@ -1,12 +1,12 @@
<?php
namespace App\Http\Controllers\Admin\Manage;
namespace App\Http\Controllers\Admin\Manage\Academic;
use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\Manage\SubmissionRequest;
use App\Http\Requests\Admin\Manage\Academic\SubmissionRequest;
use App\Models\Assignment;
use App\Models\Submission;
use App\Services\Admin\Manage\SubmissionService;
use App\Services\Admin\Manage\Academic\SubmissionService;
use Illuminate\Http\RedirectResponse;
use Inertia\Inertia;
use Inertia\Response;

View File

@ -1,12 +1,12 @@
<?php
namespace App\Http\Controllers\Admin\Manage;
namespace App\Http\Controllers\Admin\Manage\Announcement;
use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\Manage\AnnouncementRequest;
use App\Http\Requests\Admin\Manage\Announcement\AnnouncementRequest;
use App\Http\Requests\PaginatedRequest;
use App\Models\Announcement;
use App\Services\Admin\Manage\AnnouncementService;
use App\Services\Admin\Manage\Announcement\AnnouncementService;
use App\Services\Admin\Master\DepartmentService;
use Illuminate\Http\RedirectResponse;
use Inertia\Inertia;

View File

@ -1,12 +1,12 @@
<?php
namespace App\Http\Controllers\Admin\Manage;
namespace App\Http\Controllers\Admin\Manage\Course;
use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\Manage\ClassEnrollmentRequest;
use App\Http\Requests\Admin\Manage\Course\ClassEnrollmentRequest;
use App\Models\ClassEnrollment;
use App\Models\CourseClass;
use App\Services\Admin\Manage\ClassEnrollmentService;
use App\Services\Admin\Manage\Course\ClassEnrollmentService;
use Illuminate\Http\RedirectResponse;
use Inertia\Inertia;
use Inertia\Response;

View File

@ -1,13 +1,13 @@
<?php
namespace App\Http\Controllers\Admin\Manage;
namespace App\Http\Controllers\Admin\Manage\Course;
use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\Manage\CourseClassRequest;
use App\Http\Requests\Admin\Manage\Course\CourseClassRequest;
use App\Http\Requests\PaginatedRequest;
use App\Models\CourseClass;
use App\Services\Admin\Manage\CourseClassService;
use App\Services\Admin\Manage\CourseService;
use App\Services\Admin\Manage\Course\CourseClassService;
use App\Services\Admin\Manage\Course\CourseService;
use App\Services\Admin\Master\AcademicTermService;
use App\Services\Admin\Users\LecturerService;
use Illuminate\Http\RedirectResponse;

View File

@ -1,12 +1,12 @@
<?php
namespace App\Http\Controllers\Admin\Manage;
namespace App\Http\Controllers\Admin\Manage\Course;
use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\Manage\CourseRequest;
use App\Http\Requests\Admin\Manage\Course\CourseRequest;
use App\Http\Requests\PaginatedRequest;
use App\Models\Course;
use App\Services\Admin\Manage\CourseService;
use App\Services\Admin\Manage\Course\CourseService;
use App\Services\Admin\Master\DepartmentService;
use Illuminate\Http\RedirectResponse;
use Inertia\Inertia;

View File

@ -1,12 +1,12 @@
<?php
namespace App\Http\Controllers\Admin\Manage;
namespace App\Http\Controllers\Admin\Manage\Finance;
use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\Manage\TuitionInvoiceRequest;
use App\Http\Requests\Admin\Manage\Finance\TuitionInvoiceRequest;
use App\Http\Requests\PaginatedRequest;
use App\Models\TuitionInvoice;
use App\Services\Admin\Manage\TuitionInvoiceService;
use App\Services\Admin\Manage\Finance\TuitionInvoiceService;
use App\Services\Admin\Master\AcademicTermService;
use App\Services\Admin\Users\StudentService;
use Illuminate\Http\RedirectResponse;

View File

@ -1,12 +1,12 @@
<?php
namespace App\Http\Controllers\Admin\Manage;
namespace App\Http\Controllers\Admin\Manage\Finance;
use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\Manage\TuitionPaymentRequest;
use App\Http\Requests\Admin\Manage\Finance\TuitionPaymentRequest;
use App\Models\TuitionInvoice;
use App\Models\TuitionPayment;
use App\Services\Admin\Manage\TuitionPaymentService;
use App\Services\Admin\Manage\Finance\TuitionPaymentService;
use Illuminate\Http\RedirectResponse;
use Inertia\Inertia;
use Inertia\Response;

View File

@ -1,12 +1,12 @@
<?php
namespace App\Http\Controllers\Admin\Manage;
namespace App\Http\Controllers\Admin\Manage\Service;
use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\Manage\AcademicAdvisingLogRequest;
use App\Http\Requests\Admin\Manage\Service\AcademicAdvisingLogRequest;
use App\Http\Requests\PaginatedRequest;
use App\Models\AcademicAdvisingLog;
use App\Services\Admin\Manage\AcademicAdvisingLogService;
use App\Services\Admin\Manage\Service\AcademicAdvisingLogService;
use App\Services\Admin\Users\LecturerService;
use App\Services\Admin\Users\StudentService;
use Illuminate\Http\RedirectResponse;

View File

@ -1,12 +1,12 @@
<?php
namespace App\Http\Controllers\Admin\Manage;
namespace App\Http\Controllers\Admin\Manage\Service;
use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\Manage\LetterRequestRequest;
use App\Http\Requests\Admin\Manage\Service\LetterRequestRequest;
use App\Http\Requests\PaginatedRequest;
use App\Models\LetterRequest;
use App\Services\Admin\Manage\LetterRequestService;
use App\Services\Admin\Manage\Service\LetterRequestService;
use App\Services\Admin\Users\StudentService;
use Illuminate\Http\RedirectResponse;
use Inertia\Inertia;

View File

@ -1,6 +1,6 @@
<?php
namespace App\Http\Requests\Admin\Manage;
namespace App\Http\Requests\Admin\Manage\Academic;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;

View File

@ -1,6 +1,6 @@
<?php
namespace App\Http\Requests\Admin\Manage;
namespace App\Http\Requests\Admin\Manage\Academic;
use App\Enums\AttendanceStatus;
use Illuminate\Foundation\Http\FormRequest;

View File

@ -1,6 +1,6 @@
<?php
namespace App\Http\Requests\Admin\Manage;
namespace App\Http\Requests\Admin\Manage\Academic;
use App\Enums\RegistrationStatus;
use Illuminate\Foundation\Http\FormRequest;

View File

@ -1,6 +1,6 @@
<?php
namespace App\Http\Requests\Admin\Manage;
namespace App\Http\Requests\Admin\Manage\Academic;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;

View File

@ -1,6 +1,6 @@
<?php
namespace App\Http\Requests\Admin\Manage;
namespace App\Http\Requests\Admin\Manage\Academic;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;

View File

@ -1,6 +1,6 @@
<?php
namespace App\Http\Requests\Admin\Manage;
namespace App\Http\Requests\Admin\Manage\Academic;
use App\Enums\SubmissionStatus;
use Illuminate\Foundation\Http\FormRequest;

View File

@ -1,6 +1,6 @@
<?php
namespace App\Http\Requests\Admin\Manage;
namespace App\Http\Requests\Admin\Manage\Announcement;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;

View File

@ -1,6 +1,6 @@
<?php
namespace App\Http\Requests\Admin\Manage;
namespace App\Http\Requests\Admin\Manage\Course;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;

View File

@ -1,6 +1,6 @@
<?php
namespace App\Http\Requests\Admin\Manage;
namespace App\Http\Requests\Admin\Manage\Course;
use App\Enums\ClassMethod;
use App\Models\Course;

View File

@ -1,6 +1,6 @@
<?php
namespace App\Http\Requests\Admin\Manage;
namespace App\Http\Requests\Admin\Manage\Course;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;

View File

@ -1,6 +1,6 @@
<?php
namespace App\Http\Requests\Admin\Manage;
namespace App\Http\Requests\Admin\Manage\Finance;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;

View File

@ -1,6 +1,6 @@
<?php
namespace App\Http\Requests\Admin\Manage;
namespace App\Http\Requests\Admin\Manage\Finance;
use App\Enums\PaymentStatus;
use Illuminate\Foundation\Http\FormRequest;

View File

@ -1,6 +1,6 @@
<?php
namespace App\Http\Requests\Admin\Manage;
namespace App\Http\Requests\Admin\Manage\Service;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;

View File

@ -1,6 +1,6 @@
<?php
namespace App\Http\Requests\Admin\Manage;
namespace App\Http\Requests\Admin\Manage\Service;
use App\Enums\LetterStatus;
use Illuminate\Foundation\Http\FormRequest;

View File

@ -1,6 +1,6 @@
<?php
namespace App\Services\Admin\Manage;
namespace App\Services\Admin\Manage\Academic;
use App\Models\Assignment;
use Illuminate\Contracts\Pagination\LengthAwarePaginator;

View File

@ -1,6 +1,6 @@
<?php
namespace App\Services\Admin\Manage;
namespace App\Services\Admin\Manage\Academic;
use App\Enums\AttendanceStatus;
use App\Models\Attendance;

View File

@ -1,6 +1,6 @@
<?php
namespace App\Services\Admin\Manage;
namespace App\Services\Admin\Manage\Academic;
use App\Enums\RegistrationStatus;
use App\Models\ClassEnrollment;

View File

@ -1,6 +1,6 @@
<?php
namespace App\Services\Admin\Manage;
namespace App\Services\Admin\Manage\Academic;
use App\Models\Material;
use Illuminate\Contracts\Pagination\LengthAwarePaginator;

View File

@ -1,6 +1,6 @@
<?php
namespace App\Services\Admin\Manage;
namespace App\Services\Admin\Manage\Academic;
use App\Models\Schedule;
use Illuminate\Database\Eloquent\Collection;

View File

@ -1,6 +1,6 @@
<?php
namespace App\Services\Admin\Manage;
namespace App\Services\Admin\Manage\Academic;
use App\Models\Assignment;
use App\Models\Student;

View File

@ -1,6 +1,6 @@
<?php
namespace App\Services\Admin\Manage;
namespace App\Services\Admin\Manage\Announcement;
use App\Models\Announcement;
use Illuminate\Contracts\Pagination\LengthAwarePaginator;

View File

@ -1,6 +1,6 @@
<?php
namespace App\Services\Admin\Manage;
namespace App\Services\Admin\Manage\Course;
use App\Models\ClassEnrollment;
use App\Models\CourseClass;

View File

@ -1,6 +1,6 @@
<?php
namespace App\Services\Admin\Manage;
namespace App\Services\Admin\Manage\Course;
use App\Models\CourseClass;
use Illuminate\Contracts\Pagination\LengthAwarePaginator;

View File

@ -1,6 +1,6 @@
<?php
namespace App\Services\Admin\Manage;
namespace App\Services\Admin\Manage\Course;
use App\Models\Course;
use Illuminate\Contracts\Pagination\LengthAwarePaginator;

View File

@ -1,6 +1,6 @@
<?php
namespace App\Services\Admin\Manage;
namespace App\Services\Admin\Manage\Finance;
use App\Models\TuitionInvoice;
use Illuminate\Contracts\Pagination\LengthAwarePaginator;

View File

@ -1,6 +1,6 @@
<?php
namespace App\Services\Admin\Manage;
namespace App\Services\Admin\Manage\Finance;
use App\Models\TuitionInvoice;
use App\Models\TuitionPayment;

View File

@ -1,6 +1,6 @@
<?php
namespace App\Services\Admin\Manage;
namespace App\Services\Admin\Manage\Service;
use App\Models\AcademicAdvisingLog;
use Illuminate\Contracts\Pagination\LengthAwarePaginator;

View File

@ -1,6 +1,6 @@
<?php
namespace App\Services\Admin\Manage;
namespace App\Services\Admin\Manage\Service;
use App\Enums\LetterStatus;
use App\Models\LetterRequest;

View File

@ -139,6 +139,28 @@ ## 4. Struktur modul Admin ✅
Halaman CRUD frontend memakai pola: `PageHeader` (judul + tombol Tambah) →
`FormDialog` (Create/Edit) → `DataTable` + `columns.tsx``DeleteConfirmDialog`.
### 4.1 Sub-namespace di dalam `Admin\Manage`
`Admin\Manage` sendiri dipecah lagi jadi 5 sub-namespace, mengikuti
pengelompokan yang sama seperti grup di `app-sidebar.tsx` (Kelas, Kelola,
Pengumuman, Keuangan, Layanan). **URL/nama route tidak berubah** (tetap flat
`admin/manage/*` / `admin.manage.*`) — hanya struktur folder PHP-nya
(Controller, Request, Service) yang mengikuti sub-namespace ini.
| Sub-namespace | Grup sidebar | Resource |
| --------------------------- | ------------ | -------------------------------------------------------------------------- |
| `Admin\Manage\Course` | Kelola | Course, CourseClass, ClassEnrollment |
| `Admin\Manage\Academic` | Kelas | CourseRegistration, Material, Assignment, Submission, Schedule, Attendance |
| `Admin\Manage\Announcement` | Pengumuman | Announcement |
| `Admin\Manage\Finance` | Keuangan | TuitionInvoice, TuitionPayment |
| `Admin\Manage\Service` | Layanan | LetterRequest, AcademicAdvisingLog |
Kalau menambah resource baru di salah satu grup ini, taruh Controller di
`app/Http/Controllers/Admin/Manage/<SubNamespace>/`, Request-nya di
`app/Http/Requests/Admin/Manage/<SubNamespace>/`, dan Service-nya di
`app/Services/Admin/Manage/<SubNamespace>/` — jangan taruh langsung di
`Admin\Manage` tanpa sub-namespace lagi.
---
## 5. Wayfinder ✅

View File

@ -1,20 +1,20 @@
<?php
use App\Http\Controllers\Admin\FeedbackController;
use App\Http\Controllers\Admin\Manage\AcademicAdvisingLogController;
use App\Http\Controllers\Admin\Manage\AnnouncementController;
use App\Http\Controllers\Admin\Manage\AssignmentController;
use App\Http\Controllers\Admin\Manage\AttendanceController;
use App\Http\Controllers\Admin\Manage\ClassEnrollmentController;
use App\Http\Controllers\Admin\Manage\CourseClassController;
use App\Http\Controllers\Admin\Manage\CourseController;
use App\Http\Controllers\Admin\Manage\CourseRegistrationController;
use App\Http\Controllers\Admin\Manage\LetterRequestController;
use App\Http\Controllers\Admin\Manage\MaterialController;
use App\Http\Controllers\Admin\Manage\ScheduleController;
use App\Http\Controllers\Admin\Manage\SubmissionController;
use App\Http\Controllers\Admin\Manage\TuitionInvoiceController;
use App\Http\Controllers\Admin\Manage\TuitionPaymentController;
use App\Http\Controllers\Admin\Manage\Academic\AssignmentController;
use App\Http\Controllers\Admin\Manage\Academic\AttendanceController;
use App\Http\Controllers\Admin\Manage\Academic\CourseRegistrationController;
use App\Http\Controllers\Admin\Manage\Academic\MaterialController;
use App\Http\Controllers\Admin\Manage\Academic\ScheduleController;
use App\Http\Controllers\Admin\Manage\Academic\SubmissionController;
use App\Http\Controllers\Admin\Manage\Announcement\AnnouncementController;
use App\Http\Controllers\Admin\Manage\Course\ClassEnrollmentController;
use App\Http\Controllers\Admin\Manage\Course\CourseClassController;
use App\Http\Controllers\Admin\Manage\Course\CourseController;
use App\Http\Controllers\Admin\Manage\Finance\TuitionInvoiceController;
use App\Http\Controllers\Admin\Manage\Finance\TuitionPaymentController;
use App\Http\Controllers\Admin\Manage\Service\AcademicAdvisingLogController;
use App\Http\Controllers\Admin\Manage\Service\LetterRequestController;
use App\Http\Controllers\Admin\Master\AcademicTermController;
use App\Http\Controllers\Admin\Master\DepartmentController;
use App\Http\Controllers\Admin\Settings\ProfileController;