feat: update AcademicAdvisingLogController and AcademicAdvisingLogService to accept User parameter for improved access control; enhance query scoping based on user roles

This commit is contained in:
Yoga Pangestu 2026-09-03 14:44:05 +07:00
parent 80997b97b4
commit 51e943572a
2 changed files with 11 additions and 10 deletions

View File

@ -25,6 +25,7 @@ public function index(PaginatedRequest $request): Response
{ {
return Inertia::render('admin/services/academic-advising-logs/index', [ return Inertia::render('admin/services/academic-advising-logs/index', [
'logs' => $this->service->paginated( 'logs' => $this->service->paginated(
$request->user(),
...$request->validatedWithDefaults(), ...$request->validatedWithDefaults(),
lecturerId: $request->validated('lecturer_id'), lecturerId: $request->validated('lecturer_id'),
), ),

View File

@ -2,17 +2,16 @@
namespace App\Services\Admin\Services; namespace App\Services\Admin\Services;
use App\Enums\UserRole;
use App\Models\AcademicAdvisingLog; use App\Models\AcademicAdvisingLog;
use App\Models\User;
use Illuminate\Contracts\Pagination\LengthAwarePaginator; use Illuminate\Contracts\Pagination\LengthAwarePaginator;
class AcademicAdvisingLogService class AcademicAdvisingLogService
{ {
public function paginated(int $perPage = 25, string $search = '', ?int $lecturerId = null): LengthAwarePaginator public function paginated(User $user, int $perPage = 25, string $search = '', ?int $lecturerId = null): LengthAwarePaginator
{ {
$user = auth()->user();
return AcademicAdvisingLog::query() return AcademicAdvisingLog::query()
->select(['id', 'lecturer_id', 'topic', 'notes', 'created_at'])
->with([ ->with([
'students.user.profile', 'students.user.profile',
'students.department', 'students.department',
@ -23,9 +22,9 @@ public function paginated(int $perPage = 25, string $search = '', ?int $lecturer
->orWhereHas('students', fn ($q) => $q->where('student_number', 'like', "%{$search}%") ->orWhereHas('students', fn ($q) => $q->where('student_number', 'like', "%{$search}%")
->orWhereHas('user.profile', fn ($q) => $q->where('full_name', 'like', "%{$search}%")))) ->orWhereHas('user.profile', fn ($q) => $q->where('full_name', 'like', "%{$search}%"))))
->when($lecturerId, fn ($q) => $q->where('lecturer_id', $lecturerId)) ->when($lecturerId, fn ($q) => $q->where('lecturer_id', $lecturerId))
->when($user->hasRole('dosen'), fn ($q) => $q->where('lecturer_id', $user->lecturer?->id)) ->when($user->hasRole(UserRole::Dosen->value), fn ($q) => $q->where('lecturer_id', $user->lecturer?->id))
->latest() ->latest()
->paginate($perPage); ->paginate($perPage, ['id', 'lecturer_id', 'topic', 'notes', 'created_at']);
} }
public function create(array $data): AcademicAdvisingLog public function create(array $data): AcademicAdvisingLog
@ -43,10 +42,11 @@ public function create(array $data): AcademicAdvisingLog
public function update(AcademicAdvisingLog $log, array $data): AcademicAdvisingLog public function update(AcademicAdvisingLog $log, array $data): AcademicAdvisingLog
{ {
$log->lecturer_id = $data['lecturer_id']; $log->update([
$log->topic = $data['topic'] ?? null; 'lecturer_id' => $data['lecturer_id'],
$log->notes = $data['notes'] ?? null; 'topic' => $data['topic'] ?? null,
$log->update(); 'notes' => $data['notes'] ?? null,
]);
$log->students()->sync($data['student_ids']); $log->students()->sync($data['student_ids']);