feat: implement announcement management with CRUD functionality

This commit is contained in:
Yoga Pangestu 2026-08-30 21:11:30 +07:00
parent 26a6771448
commit 5cc33cce2c
7 changed files with 23 additions and 28 deletions

View File

@ -1,12 +1,12 @@
<?php
namespace App\Http\Controllers\Admin\Announcements;
namespace App\Http\Controllers\Admin\Manage;
use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\Announcements\AnnouncementRequest;
use App\Http\Requests\Admin\Manage\AnnouncementRequest;
use App\Http\Requests\PaginatedRequest;
use App\Models\Announcement;
use App\Services\Admin\Announcements\AnnouncementService;
use App\Services\Admin\Manage\AnnouncementService;
use App\Services\Admin\Master\DepartmentService;
use Illuminate\Http\RedirectResponse;
use Inertia\Inertia;
@ -21,7 +21,7 @@ public function __construct(
public function index(PaginatedRequest $request): Response
{
return Inertia::render('admin/announcements/index', [
return Inertia::render('admin/manage/announcements/index', [
'announcements' => $this->service->paginated(
...$request->validatedWithDefaults(),
departmentId: $request->validated('department_id'),
@ -37,7 +37,7 @@ public function store(AnnouncementRequest $request): RedirectResponse
Inertia::flash('toast', ['type' => 'success', 'message' => 'Pengumuman berhasil ditambahkan.']);
return to_route('admin.announcements.index');
return to_route('admin.manage.announcements.index');
}
public function update(AnnouncementRequest $request, Announcement $announcement): RedirectResponse
@ -46,7 +46,7 @@ public function update(AnnouncementRequest $request, Announcement $announcement)
Inertia::flash('toast', ['type' => 'success', 'message' => 'Pengumuman berhasil diperbarui.']);
return to_route('admin.announcements.index');
return to_route('admin.manage.announcements.index');
}
public function destroy(Announcement $announcement): RedirectResponse

View File

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

View File

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

View File

@ -37,9 +37,9 @@ import { index as assignmentsRoute } from '@/routes/admin/academic-classes/assig
import { index as attendancesRoute } from '@/routes/admin/academic-classes/attendances';
import { index as materialsRoute } from '@/routes/admin/academic-classes/materials';
import { index as schedulesRoute } from '@/routes/admin/academic-classes/schedules';
import { index as announcementsRoute } from '@/routes/admin/announcements';
import { index as feedbackRoute } from '@/routes/admin/feedback';
import { index as tuitionInvoicesRoute } from '@/routes/admin/finances/tuition-invoices';
import { index as announcementsRoute } from '@/routes/admin/manage/announcements';
import { index as courseClassesRoute } from '@/routes/admin/manage/course-classes';
import { index as courseRegistrationsRoute } from '@/routes/admin/manage/course-registrations';
import { index as academicTerm } from '@/routes/admin/master/academic-terms';
@ -114,6 +114,11 @@ const data: {
url: courseClassesRoute.url(),
icon: School,
},
{
name: 'Pengumuman',
url: announcementsRoute.url(),
icon: Megaphone,
},
],
},
{
@ -141,16 +146,6 @@ const data: {
},
],
},
{
label: 'Pengumuman',
items: [
{
name: 'Pengumuman',
url: announcementsRoute.url(),
icon: Megaphone,
},
],
},
{
label: 'Keuangan',
items: [

View File

@ -26,7 +26,7 @@ import {
destroy,
store,
update,
} from '@/routes/admin/announcements';
} from '@/routes/admin/manage/announcements';
import type {
Announcement,
AnnouncementDepartment,

View File

@ -5,10 +5,10 @@
use App\Http\Controllers\Admin\AcademicClasses\MaterialController;
use App\Http\Controllers\Admin\AcademicClasses\ScheduleController;
use App\Http\Controllers\Admin\AcademicClasses\SubmissionController;
use App\Http\Controllers\Admin\Announcements\AnnouncementController;
use App\Http\Controllers\Admin\FeedbackController;
use App\Http\Controllers\Admin\Finances\TuitionInvoiceController;
use App\Http\Controllers\Admin\Finances\TuitionPaymentController;
use App\Http\Controllers\Admin\Manage\AnnouncementController;
use App\Http\Controllers\Admin\Manage\ClassEnrollmentController;
use App\Http\Controllers\Admin\Manage\CourseClassController;
use App\Http\Controllers\Admin\Manage\CourseRegistrationController;
@ -76,6 +76,13 @@
Route::post('/', [ClassEnrollmentController::class, 'store'])->name('store');
Route::delete('{enrollment}', [ClassEnrollmentController::class, 'destroy'])->name('destroy');
});
Route::prefix('announcements')->name('announcements.')->group(function () {
Route::get('/', [AnnouncementController::class, 'index'])->name('index');
Route::post('/', [AnnouncementController::class, 'store'])->name('store');
Route::put('{announcement}', [AnnouncementController::class, 'update'])->name('update');
Route::delete('{announcement}', [AnnouncementController::class, 'destroy'])->name('destroy');
});
});
Route::middleware('role:mahasiswa')->prefix('course-registrations')->name('student.course-registrations.')->group(function () {
@ -85,13 +92,6 @@
Route::get('{submission}', [CourseRegistrationController::class, 'show'])->name('show');
});
Route::prefix('admin/announcements')->name('admin.announcements.')->group(function () {
Route::get('/', [AnnouncementController::class, 'index'])->name('index');
Route::post('/', [AnnouncementController::class, 'store'])->name('store');
Route::put('{announcement}', [AnnouncementController::class, 'update'])->name('update');
Route::delete('{announcement}', [AnnouncementController::class, 'destroy'])->name('destroy');
});
Route::prefix('admin/finances')->name('admin.finances.')->group(function () {
Route::resource('tuition-invoices', TuitionInvoiceController::class)->except(['create', 'edit', 'show']);