feat: endpoint prestasi siswa (student_achievements kesiswaan)

This commit is contained in:
Novy San87
2026-08-06 21:06:56 +07:00
parent 3f780814e2
commit c1cdc016ba
2 changed files with 43 additions and 0 deletions
@@ -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. * Tautkan anak tambahan (kakak/adik) ke akun wali.
*/ */
+1
View File
@@ -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}/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}/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}/classmates', [ParentStudentController::class, 'classmates'])->name('api.parent.students.classmates');
Route::get('/students/{student}/achievements', [ParentStudentController::class, 'achievements'])->name('api.parent.students.achievements');
// Notifikasi & perangkat // Notifikasi & perangkat
Route::get('/notifications', [ParentNotificationController::class, 'index'])->name('api.parent.notifications'); Route::get('/notifications', [ParentNotificationController::class, 'index'])->name('api.parent.notifications');