feat: add graduation archive and public document services

This commit is contained in:
2026-04-14 13:51:39 +00:00
parent d77ad72bcc
commit 58c9b47dc0
30 changed files with 2513 additions and 295 deletions
+16
View File
@@ -0,0 +1,16 @@
<?php
use App\Http\Controllers\Api\Integration\AcademicYearSyncController;
use App\Http\Controllers\Api\Integration\DepartmentSyncController;
use App\Http\Controllers\Api\Integration\SchoolClassSyncController;
use App\Http\Controllers\Api\Integration\StudentSyncController;
use Illuminate\Support\Facades\Route;
Route::prefix('integration')
->middleware('sync.token')
->group(function () {
Route::get('academic-years', AcademicYearSyncController::class)->name('api.integration.academic-years');
Route::get('departments', DepartmentSyncController::class)->name('api.integration.departments');
Route::get('classes', SchoolClassSyncController::class)->name('api.integration.classes');
Route::get('students', StudentSyncController::class)->name('api.integration.students');
});
+14 -1
View File
@@ -16,9 +16,12 @@ use App\Http\Controllers\StudentParentController;
use App\Http\Controllers\StudentDocumentController;
use App\Http\Controllers\StudentExitController;
use App\Http\Controllers\StudentTransferController;
use App\Http\Controllers\GraduatedStudentController;
use App\Http\Controllers\GraduationBulkUploadController;
use App\Http\Controllers\StudentPromotionController;
use App\Http\Controllers\StudentSelfServiceController;
use App\Http\Controllers\StudentAchievementController;
use App\Http\Controllers\SyncTokenController;
use App\Http\Controllers\UserManagementController;
use Illuminate\Support\Facades\Route;
@@ -32,6 +35,7 @@ Route::redirect('/portal-admin-dk-login', '/masuk-admin');
Route::redirect('/masuk-admin-rahasia', '/masuk-admin')->name('hidden-login');
Route::get('public/student-documents/{document}/preview', [StudentDocumentController::class, 'publicPreview'])->name('public.students.documents.preview');
Route::get('public/student-documents/{document}/download', [StudentDocumentController::class, 'publicDownload'])->name('public.students.documents.download');
Route::get('public/students/{student}/graduation-documents/{document}/download', [PublicStudentLookupController::class, 'downloadGraduationDocument'])->name('public.students.graduation-documents.download');
Route::get('regions/provinces/{province}/regencies', [RegionController::class, 'regencies'])->name('regions.regencies');
Route::get('regions/regencies/{regency}/districts', [RegionController::class, 'districts'])->name('regions.districts');
Route::get('regions/districts/{district}/villages', [RegionController::class, 'villages'])->name('regions.villages');
@@ -50,6 +54,9 @@ Route::middleware(['auth', 'verified'])->group(function () {
Route::resource('users', UserManagementController::class)->except(['show']);
Route::get('branding', [BrandingSettingController::class, 'index'])->name('branding.index');
Route::put('branding', [BrandingSettingController::class, 'update'])->name('branding.update');
Route::get('sync-tokens', [SyncTokenController::class, 'index'])->name('sync-tokens.index');
Route::post('sync-tokens', [SyncTokenController::class, 'store'])->name('sync-tokens.store');
Route::patch('sync-tokens/{syncToken}/revoke', [SyncTokenController::class, 'revoke'])->name('sync-tokens.revoke');
Route::get('reset-data', [MaintenanceController::class, 'index'])->name('reset-data.index');
Route::post('reset-data', [MaintenanceController::class, 'reset'])->name('reset-data.execute');
});
@@ -63,7 +70,13 @@ Route::middleware(['auth', 'verified'])->group(function () {
Route::get('students/mutasi/{studentTransfer}', [StudentTransferController::class, 'show'])->name('student-transfers.show');
Route::patch('students/mutasi/{studentTransfer}', [StudentTransferController::class, 'update'])->name('student-transfers.update');
Route::get('students/mutasi/{studentTransfer}/preview-letter', [StudentTransferController::class, 'previewLetter'])->name('student-transfers.preview-letter');
Route::get('students/lulus', [StudentController::class, 'index'])->defaults('view', 'graduated')->name('students.graduated');
Route::get('students/lulus', [GraduatedStudentController::class, 'index'])->name('graduated-students.index');
Route::get('students/lulus/bulk-upload', [GraduationBulkUploadController::class, 'index'])->name('graduated-students.bulk-upload.index');
Route::post('students/lulus/bulk-upload/preview', [GraduationBulkUploadController::class, 'preview'])->name('graduated-students.bulk-upload.preview');
Route::post('students/lulus/bulk-upload', [GraduationBulkUploadController::class, 'store'])->name('graduated-students.bulk-upload.store');
Route::get('students/lulus/{graduatedStudent}', [GraduatedStudentController::class, 'show'])->name('graduated-students.show');
Route::patch('students/lulus/{graduatedStudent}', [GraduatedStudentController::class, 'update'])->name('graduated-students.update');
Route::get('students/lulus/{graduatedStudent}/preview-document/{document}', [GraduatedStudentController::class, 'previewDocument'])->name('graduated-students.preview-document');
Route::get('students/import', [StudentController::class, 'importForm'])->name('students.import.form');
Route::post('students/import/preview', [StudentController::class, 'previewImport'])->name('students.import.preview');
Route::post('students/import', [StudentController::class, 'import'])->name('students.import');