diff --git a/app/Http/Controllers/Api/ParentStudentController.php b/app/Http/Controllers/Api/ParentStudentController.php index ffb27be..2cde55f 100644 --- a/app/Http/Controllers/Api/ParentStudentController.php +++ b/app/Http/Controllers/Api/ParentStudentController.php @@ -450,6 +450,48 @@ class ParentStudentController extends Controller ]); } + /** + * Prestasi putra/putri (dari student_achievements database kesiswaan). + */ + public function achievements(Request $request, Student $student): JsonResponse + { + $hasLink = ParentStudent::where('user_id', $request->user()->id) + ->where('student_id', $student->id) + ->where('status', 'active') + ->exists(); + + abort_unless($hasLink, 403, 'Putra/putri belum tertaut aktif.'); + + try { + $rows = DB::connection('kesiswaan') + ->table('student_achievements') + ->where('student_id', $student->source_id) + ->orderByDesc('achievement_date') + ->orderByDesc('achievement_year') + ->get(); + + $items = $rows->map(fn ($r) => [ + 'name' => $r->achievement_name, + 'category' => $r->category, + 'level' => $r->level, + 'organizer' => $r->organizer, + 'rank' => $r->rank, + 'date' => $r->achievement_date, + 'year' => $r->achievement_year, + 'description' => $r->description, + ])->values(); + + return response()->json([ + 'achievements' => $items, + 'total' => $items->count(), + ]); + } catch (\Throwable $e) { + Log::error('Prestasi gagal dimuat: '.$e->getMessage()); + + return response()->json(['achievements' => [], 'total' => 0]); + } + } + /** * Tautkan anak tambahan (kakak/adik) ke akun wali. */ diff --git a/routes/api.php b/routes/api.php index 6005c6f..3bca9c8 100644 --- a/routes/api.php +++ b/routes/api.php @@ -41,6 +41,7 @@ Route::middleware('auth:sanctum')->prefix('parent')->group(function () { Route::get('/students/{student}/violations-stats', [ParentStudentController::class, 'violationsStats'])->name('api.parent.students.violations-stats'); Route::get('/students/{student}/grades', [ParentStudentController::class, 'grades'])->name('api.parent.students.grades'); Route::get('/students/{student}/classmates', [ParentStudentController::class, 'classmates'])->name('api.parent.students.classmates'); + Route::get('/students/{student}/achievements', [ParentStudentController::class, 'achievements'])->name('api.parent.students.achievements'); // Notifikasi & perangkat Route::get('/notifications', [ParentNotificationController::class, 'index'])->name('api.parent.notifications');