update controllers logic
This commit is contained in:
Executable → Regular
+149
-64
@@ -3,8 +3,7 @@
|
||||
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use App\Http\Controllers\Api\Auth\AuthController;
|
||||
use App\Http\Controllers\DocsController;
|
||||
use App\Http\Controllers\Api\UserController;
|
||||
use App\Http\Controllers\Api\Users\UserController;
|
||||
use App\Http\Controllers\Api\Administrator\AdministratorEnrollmentController;
|
||||
use App\Http\Controllers\Api\Administrator\AdministratorAbsenceController;
|
||||
use App\Http\Controllers\Api\Administrator\AdministratorDashboardController;
|
||||
@@ -14,7 +13,6 @@ use App\Http\Controllers\Api\Administrator\EmergencyContactController as Adminis
|
||||
use App\Http\Controllers\Api\Administrator\TeacherClassAssignmentController;
|
||||
use App\Http\Controllers\Api\Badges\BadgeController;
|
||||
use App\Http\Controllers\Api\Students\StudentController;
|
||||
use App\Http\Controllers\Api\Attendance\AttendanceController;
|
||||
use App\Http\Controllers\Api\Students\StudentController as StudentApiController;
|
||||
use App\Http\Controllers\Api\Finance\InvoiceController;
|
||||
use App\Http\Controllers\Api\Assignment\AssignmentApiController;
|
||||
@@ -77,15 +75,15 @@ use App\Http\Controllers\Api\Finance\PaymentEventChargesController;
|
||||
use App\Http\Controllers\Api\Finance\PaymentManualController;
|
||||
use App\Http\Controllers\Api\Finance\PaypalPaymentController;
|
||||
use App\Http\Controllers\Api\Auth\RegisterController;
|
||||
use App\Http\Controllers\Api\RolePermissionController;
|
||||
use App\Http\Controllers\Api\RoleSwitcherController;
|
||||
use App\Http\Controllers\Api\Auth\RolePermissionController;
|
||||
use App\Http\Controllers\Api\Auth\RoleSwitcherController;
|
||||
use App\Http\Controllers\Api\Settings\SchoolCalendarController;
|
||||
use App\Http\Controllers\Api\Scores\ScorePredictorController;
|
||||
use App\Http\Controllers\Api\Reports\SlipPrinterController;
|
||||
use App\Http\Controllers\Api\Inventory\SupplierController;
|
||||
use App\Http\Controllers\Api\Inventory\SupplyCategoryController;
|
||||
use App\Http\Controllers\Api\Staff\TeacherController;
|
||||
use App\Http\Controllers\Api\StatsController;
|
||||
use App\Http\Controllers\Api\System\StatsController;
|
||||
use App\Http\Controllers\Api\Ui\UiController;
|
||||
use App\Http\Controllers\Api\Support\ContactController as SupportContactController;
|
||||
use App\Http\Controllers\Api\Support\SupportController as ApiSupportController;
|
||||
@@ -113,8 +111,77 @@ use App\Http\Controllers\Api\Attendance\AdminAttendanceApiController;
|
||||
use App\Http\Controllers\Api\Attendance\AttendanceCommentTemplateController;
|
||||
use App\Http\Controllers\Api\Attendance\TeacherAttendanceApiController;
|
||||
use App\Http\Controllers\Api\Attendance\StaffAttendanceApiController;
|
||||
use App\Http\Controllers\Api\Utilities\ProofreadController;
|
||||
use App\Http\Controllers\Api\PrintRequests\PrintRequestsController;
|
||||
use App\Http\Controllers\Api\BadgeScan\BadgeScanController;
|
||||
use App\Http\Controllers\Api\Documentation\ApiDocsAdminController;
|
||||
use App\Http\Controllers\Api\Documentation\DocsCatalogController;
|
||||
use App\Http\Controllers\Api\Parents\AuthorizedUserInviteController;
|
||||
use App\Http\Controllers\Api\Public\PublicWinnersController;
|
||||
use App\Http\Controllers\Api\Staff\TimeOffNotificationController;
|
||||
use App\Http\Controllers\Api\System\AccessDeniedController;
|
||||
// CodeIgniter also registers POST /api/login and POST /api/register (public, no /v1).
|
||||
Route::post('login', [AuthController::class, 'login']);
|
||||
Route::post('register', [RegisterController::class, 'store']);
|
||||
|
||||
/*
|
||||
| CodeIgniter POST /api/proofread (LanguageTool proxy; session or Bearer like CI auth filter).
|
||||
*/
|
||||
Route::post('proofread', [ProofreadController::class, 'check'])->middleware('teacher.portal.auth');
|
||||
|
||||
Route::get('documentation/swagger.json', [DocsCatalogController::class, 'swaggerMergedJson'])
|
||||
->name('docs.swagger-json');
|
||||
|
||||
Route::prefix('documentation')->group(function () {
|
||||
Route::get('/', [DocsCatalogController::class, 'index'])->name('docs.index');
|
||||
Route::get('/swagger', [DocsCatalogController::class, 'swagger'])->name('docs.swagger.catalog');
|
||||
});
|
||||
|
||||
Route::middleware('auth.docs')->group(function () {
|
||||
Route::get('docs', [ApiDocsAdminController::class, 'index'])->name('api-docs.index');
|
||||
});
|
||||
|
||||
Route::get('docs/public', [ApiDocsAdminController::class, 'public'])->name('api-docs.public');
|
||||
|
||||
Route::get('access_denied', [AccessDeniedController::class, 'accessDenied'])->name('access_denied');
|
||||
|
||||
Route::get('timeoff/notify/{token}', [TimeOffNotificationController::class, 'notify'])
|
||||
->where('token', '[^/]+')
|
||||
->name('api.timeoff.notify');
|
||||
|
||||
Route::prefix('winners/competitions')->group(function () {
|
||||
Route::get('/', [PublicWinnersController::class, 'competitionIndex']);
|
||||
Route::get('{id}', [PublicWinnersController::class, 'competitionShow'])->whereNumber('id');
|
||||
});
|
||||
|
||||
Route::get('confirm_authorized_user', [AuthorizedUserInviteController::class, 'confirm'])
|
||||
->name('api.invite.confirm');
|
||||
Route::get('set_authorized_user_password/{authorizedUserId}', [AuthorizedUserInviteController::class, 'setPasswordForm'])
|
||||
->whereNumber('authorizedUserId')
|
||||
->name('api.invite.set-password-form');
|
||||
Route::post('set_authorized_user_password/{authorizedUserId}', [AuthorizedUserInviteController::class, 'savePassword'])
|
||||
->whereNumber('authorizedUserId')
|
||||
->name('api.invite.set-password');
|
||||
|
||||
/*
|
||||
| Legacy paths without /v1: POST cannot use 301 reliably; alias to same handlers as v1 (auth:api).
|
||||
| GET uses 301 to canonical /api/v1/...
|
||||
*/
|
||||
Route::middleware('auth:api')->prefix('attendance-templates')->group(function () {
|
||||
Route::post('save', [AttendanceCommentTemplateController::class, 'legacySave']);
|
||||
Route::post('delete', [AttendanceCommentTemplateController::class, 'legacyDelete']);
|
||||
});
|
||||
|
||||
Route::permanentRedirect('attendance-templates', '/api/v1/attendance-templates');
|
||||
Route::permanentRedirect('attendance-comment-templates', '/api/v1/attendance-comment-templates');
|
||||
Route::permanentRedirect('attendance-comment-templates/list-data', '/api/v1/attendance-comment-templates/list-data');
|
||||
Route::permanentRedirect('administrator/attendance-templates', '/api/v1/administrator/attendance-templates');
|
||||
|
||||
Route::prefix('v1')->group(function () {
|
||||
// Parity with CodeIgniter: POST /api/v1/login and POST /api/v1/register (public, no /auth prefix)
|
||||
Route::post('login', [AuthController::class, 'login']);
|
||||
Route::post('register', [RegisterController::class, 'store']);
|
||||
|
||||
Route::prefix('auth')->group(function () {
|
||||
Route::get('register/captcha', [RegisterController::class, 'captcha']);
|
||||
Route::post('register', [RegisterController::class, 'store']);
|
||||
@@ -138,6 +205,12 @@ Route::prefix('v1')->group(function () {
|
||||
|
||||
Route::post('contact', [SupportContactController::class, 'send']);
|
||||
|
||||
/*
|
||||
| Badge scan kiosk (public, throttled). Logs: authenticated staff (legacy CI RFIDController).
|
||||
*/
|
||||
Route::post('badge_scan/scan', [BadgeScanController::class, 'scan'])
|
||||
->middleware('throttle:120,1');
|
||||
|
||||
Route::prefix('frontend')->group(function () {
|
||||
Route::get('/', [FrontendController::class, 'index']);
|
||||
Route::get('facility', [FrontendController::class, 'facility']);
|
||||
@@ -168,6 +241,8 @@ Route::prefix('v1')->group(function () {
|
||||
Route::post('reorder', [NavBuilderController::class, 'reorder']);
|
||||
});
|
||||
|
||||
Route::middleware(['auth:api', 'badge_scan.logs'])->get('badge_scan/logs', [BadgeScanController::class, 'logs']);
|
||||
|
||||
Route::middleware('auth:api')->prefix('landing')->group(function () {
|
||||
Route::get('/', [LandingPageController::class, 'index']);
|
||||
Route::get('teacher', [LandingPageController::class, 'teacher']);
|
||||
@@ -178,11 +253,35 @@ Route::prefix('v1')->group(function () {
|
||||
Route::get('guest', [LandingPageController::class, 'guest']);
|
||||
});
|
||||
|
||||
/*
|
||||
| Print requests (CodeIgniter PrintRequests — teacher/admin JSON + uploads).
|
||||
*/
|
||||
Route::middleware('auth:api')->prefix('print-requests')->group(function () {
|
||||
Route::middleware('print_requests.teacher')->group(function () {
|
||||
Route::get('teacher', [PrintRequestsController::class, 'teacher']);
|
||||
Route::post('/', [PrintRequestsController::class, 'store']);
|
||||
Route::patch('{id}', [PrintRequestsController::class, 'teacherUpdate'])->whereNumber('id');
|
||||
Route::delete('{id}', [PrintRequestsController::class, 'destroy'])->whereNumber('id');
|
||||
Route::post('hand-copy', [PrintRequestsController::class, 'handCopy']);
|
||||
Route::post('{id}/copy', [PrintRequestsController::class, 'copy'])->whereNumber('id');
|
||||
});
|
||||
|
||||
Route::middleware('print_requests.admin')->group(function () {
|
||||
Route::get('admin', [PrintRequestsController::class, 'admin']);
|
||||
Route::patch('{id}/status', [PrintRequestsController::class, 'adminStatus'])->whereNumber('id');
|
||||
});
|
||||
|
||||
Route::get('{id}/file', [PrintRequestsController::class, 'download'])->whereNumber('id');
|
||||
});
|
||||
|
||||
Route::middleware('auth:api')->prefix('info-icon')->group(function () {
|
||||
Route::get('profile', [InfoIconController::class, 'profileIcon']);
|
||||
});
|
||||
|
||||
Route::middleware('auth:api')->prefix('administrator')->group(function () {
|
||||
Route::get('attendance-templates', [AttendanceCommentTemplateController::class, 'bootstrapUrls'])
|
||||
->name('api.v1.administrator.attendance-templates.bootstrap');
|
||||
|
||||
Route::get('absence', [AdministratorAbsenceController::class, 'index']);
|
||||
Route::post('absence', [AdministratorAbsenceController::class, 'store']);
|
||||
|
||||
@@ -237,7 +336,7 @@ Route::prefix('v1')->group(function () {
|
||||
});
|
||||
});
|
||||
|
||||
Route::prefix('attendance-tracking')->group(function () {
|
||||
Route::middleware('auth:api')->prefix('attendance-tracking')->group(function () {
|
||||
Route::get('/pending-violations', [AttendanceTrackingController::class, 'pendingViolations']);
|
||||
Route::get('/notified-violations', [AttendanceTrackingController::class, 'notifiedViolations']);
|
||||
Route::get('/student-case/{studentId}', [AttendanceTrackingController::class, 'studentCase']);
|
||||
@@ -249,7 +348,26 @@ Route::prefix('v1')->group(function () {
|
||||
Route::post('/save-notification-note', [AttendanceTrackingController::class, 'saveNotificationNote']);
|
||||
});
|
||||
|
||||
Route::prefix('assignments')->group(function () {
|
||||
Route::middleware('auth:api')->prefix('attendance-comment-templates')->group(function () {
|
||||
Route::get('/', [AttendanceCommentTemplateController::class, 'index'])->name('api.v1.attendance-comment-templates.index');
|
||||
Route::get('list-data', [AttendanceCommentTemplateController::class, 'listData'])
|
||||
->name('api.v1.attendance-comment-templates.list-data');
|
||||
Route::get('{id}', [AttendanceCommentTemplateController::class, 'show']);
|
||||
Route::post('/', [AttendanceCommentTemplateController::class, 'store']);
|
||||
Route::put('{id}', [AttendanceCommentTemplateController::class, 'update']);
|
||||
Route::delete('{id}', [AttendanceCommentTemplateController::class, 'destroy']);
|
||||
});
|
||||
|
||||
/*
|
||||
| CodeIgniter View\AttendanceCommentTemplateController — legacy list/save/delete (auth:api).
|
||||
*/
|
||||
Route::middleware('auth:api')->prefix('attendance-templates')->group(function () {
|
||||
Route::get('/', [AttendanceCommentTemplateController::class, 'listData'])->name('api.v1.attendance-templates.legacy');
|
||||
Route::post('save', [AttendanceCommentTemplateController::class, 'legacySave']);
|
||||
Route::post('delete', [AttendanceCommentTemplateController::class, 'legacyDelete']);
|
||||
});
|
||||
|
||||
Route::middleware('auth:api')->prefix('assignments')->group(function () {
|
||||
Route::get('/', [AssignmentApiController::class, 'index']);
|
||||
Route::post('/', [AssignmentApiController::class, 'store']);
|
||||
Route::get('/class-assignment-data', [AssignmentApiController::class, 'classAssignmentData']);
|
||||
@@ -416,10 +534,11 @@ Route::prefix('v1')->group(function () {
|
||||
Route::get('{studentId}/emergency-contacts', [StudentApiController::class, 'emergencyContacts']);
|
||||
Route::post('{studentId}/emergency-contacts', [StudentApiController::class, 'addEmergencyContact']);
|
||||
Route::patch('{studentId}/emergency-contacts/{contactId}', [StudentApiController::class, 'updateEmergencyContact']);
|
||||
Route::post('{studentId}/rfid', [StudentApiController::class, 'updateRfid']);
|
||||
Route::post('{studentId}/badge_scan', [StudentApiController::class, 'updateBadgeScan']);
|
||||
Route::post('{studentId}/photo', [StudentApiController::class, 'uploadPhoto']);
|
||||
Route::get('{studentId}/photo', [StudentApiController::class, 'photo']);
|
||||
Route::get('{studentId}/report-card', [ReportCardsController::class, 'studentReport']);
|
||||
Route::get('{studentId}/report-card', [ReportCardsController::class, 'studentReport'])
|
||||
->name('api.v1.students.report-card');
|
||||
Route::get('{studentId}/score-card', [StudentApiController::class, 'scoreCard']);
|
||||
});
|
||||
|
||||
@@ -444,6 +563,12 @@ Route::prefix('v1')->group(function () {
|
||||
Route::get('attendance-reports', [ParentAttendanceReportApiController::class, 'list']);
|
||||
Route::post('attendance-reports/check-existing', [ParentAttendanceReportApiController::class, 'checkExisting']);
|
||||
Route::patch('attendance-reports/{reportId}', [ParentAttendanceReportApiController::class, 'update']);
|
||||
|
||||
Route::get('authorized-users', [AuthorizedUsersController::class, 'index']);
|
||||
Route::get('authorized-users/{id}', [AuthorizedUsersController::class, 'show'])->whereNumber('id');
|
||||
Route::post('authorized-users', [AuthorizedUsersController::class, 'store']);
|
||||
Route::patch('authorized-users/{id}', [AuthorizedUsersController::class, 'update'])->whereNumber('id');
|
||||
Route::delete('authorized-users/{id}', [AuthorizedUsersController::class, 'destroy'])->whereNumber('id');
|
||||
});
|
||||
|
||||
Route::prefix('users')->group(function () {
|
||||
@@ -587,7 +712,8 @@ Route::prefix('v1')->group(function () {
|
||||
Route::post('batches/assign', [ReimbursementController::class, 'updateBatchAssignment']);
|
||||
Route::post('batches/lock', [ReimbursementController::class, 'lockBatch']);
|
||||
Route::post('batches/admin-files', [ReimbursementController::class, 'uploadBatchAdminFile']);
|
||||
Route::get('batches/admin-files/{name}/{mode?}', [ReimbursementController::class, 'serveAdminCheckFile']);
|
||||
Route::get('batches/admin-files/{name}/{mode?}', [ReimbursementController::class, 'serveAdminCheckFile'])
|
||||
->name('api.v1.finance.reimbursements.admin-file');
|
||||
Route::post('batches/email', [ReimbursementController::class, 'sendBatchEmail']);
|
||||
Route::get('export', [ReimbursementController::class, 'export']);
|
||||
Route::get('batches/export', [ReimbursementController::class, 'exportBatch']);
|
||||
@@ -656,17 +782,20 @@ Route::prefix('v1')->group(function () {
|
||||
Route::prefix('paypal')->group(function () {
|
||||
Route::get('redirect', [PaypalPaymentController::class, 'redirect']);
|
||||
Route::post('payments/{paymentId}/create', [PaypalPaymentController::class, 'create']);
|
||||
Route::post('execute', [PaypalPaymentController::class, 'execute']);
|
||||
Route::get('cancel', [PaypalPaymentController::class, 'cancel']);
|
||||
Route::post('execute', [PaypalPaymentController::class, 'execute'])->name('api.v1.finance.paypal.execute');
|
||||
Route::get('cancel', [PaypalPaymentController::class, 'cancel'])->name('api.v1.finance.paypal.cancel');
|
||||
});
|
||||
});
|
||||
|
||||
Route::prefix('files')->group(function () {
|
||||
Route::get('receipts/{name}', [FilesController::class, 'receipt']);
|
||||
Route::get('reimbursements/{name}', [FilesController::class, 'reimb']);
|
||||
Route::get('early-dismissal/{name}', [FilesController::class, 'earlyDismissalSignature']);
|
||||
Route::get('exams/teacher/{name}', [FilesController::class, 'examDraftTeacher']);
|
||||
Route::get('exams/final/{name}', [FilesController::class, 'examDraftFinal']);
|
||||
Route::get('receipts/{name}', [FilesController::class, 'receipt'])->name('api.v1.files.receipt');
|
||||
Route::get('reimbursements/{name}', [FilesController::class, 'reimb'])->name('api.v1.files.reimbursement');
|
||||
Route::get('early-dismissal/{name}', [FilesController::class, 'earlyDismissalSignature'])
|
||||
->name('api.v1.files.early-dismissal');
|
||||
Route::get('exams/teacher/{name}', [FilesController::class, 'examDraftTeacher'])
|
||||
->name('api.v1.files.exam-draft-teacher');
|
||||
Route::get('exams/final/{name}', [FilesController::class, 'examDraftFinal'])
|
||||
->name('api.v1.files.exam-draft-final');
|
||||
});
|
||||
|
||||
Route::prefix('reports/slips')->group(function () {
|
||||
@@ -839,11 +968,12 @@ Route::prefix('v1')->group(function () {
|
||||
Route::get('meta', [ClassProgressController::class, 'meta']);
|
||||
Route::get('/', [ClassProgressController::class, 'index']);
|
||||
Route::post('/', [ClassProgressController::class, 'store']);
|
||||
Route::get('attachments/{attachment}', [ClassProgressController::class, 'downloadAttachment'])
|
||||
->name('api.v1.class-progress.attachment');
|
||||
Route::get('{class_progress}', [ClassProgressController::class, 'show']);
|
||||
Route::patch('{class_progress}', [ClassProgressController::class, 'update']);
|
||||
Route::delete('{class_progress}', [ClassProgressController::class, 'destroy']);
|
||||
Route::get('{class_progress}/attachment', [ClassProgressController::class, 'downloadLegacyAttachment']);
|
||||
Route::get('attachments/{attachment}', [ClassProgressController::class, 'downloadAttachment']);
|
||||
});
|
||||
|
||||
Route::prefix('badges')->group(function () {
|
||||
@@ -854,48 +984,3 @@ Route::prefix('v1')->group(function () {
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Route::prefix('attendance-comment-templates')->group(function () {
|
||||
Route::get('/', [AttendanceCommentTemplateController::class, 'index']);
|
||||
Route::get('list-data', [AttendanceCommentTemplateController::class, 'listData']);
|
||||
Route::get('{id}', [AttendanceCommentTemplateController::class, 'show']);
|
||||
Route::post('/', [AttendanceCommentTemplateController::class, 'store']);
|
||||
Route::put('{id}', [AttendanceCommentTemplateController::class, 'update']);
|
||||
Route::delete('{id}', [AttendanceCommentTemplateController::class, 'destroy']);
|
||||
});
|
||||
|
||||
Route::prefix('attendance-tracking')->group(function () {
|
||||
Route::get('pending-violations', [AttendanceTrackingController::class, 'pendingViolations']);
|
||||
Route::get('notified-violations', [AttendanceTrackingController::class, 'notifiedViolations']);
|
||||
Route::get('student-case/{studentId}', [AttendanceTrackingController::class, 'studentCase']);
|
||||
Route::post('record', [AttendanceTrackingController::class, 'record']);
|
||||
Route::post('send-auto-emails', [AttendanceTrackingController::class, 'sendAutoEmails']);
|
||||
Route::get('compose', [AttendanceTrackingController::class, 'compose']);
|
||||
Route::post('send-manual-email', [AttendanceTrackingController::class, 'sendManualEmail']);
|
||||
Route::get('parents-info', [AttendanceTrackingController::class, 'parentsInfo']);
|
||||
Route::post('save-notification-note', [AttendanceTrackingController::class, 'saveNotificationNote']);
|
||||
});
|
||||
|
||||
Route::middleware('auth:api')->group(function () {
|
||||
Route::prefix('assignments')->group(function () {
|
||||
Route::get('/', [AssignmentApiController::class, 'index']);
|
||||
Route::post('/', [AssignmentApiController::class, 'store']);
|
||||
Route::get('class-assignment-data', [AssignmentApiController::class, 'classAssignmentData']);
|
||||
});
|
||||
|
||||
Route::prefix('badges')->group(function () {
|
||||
Route::get('form-data', [BadgeController::class, 'formData']);
|
||||
Route::post('pdf', [BadgeController::class, 'generatePdf']);
|
||||
Route::get('print-status', [BadgeController::class, 'printStatus']);
|
||||
Route::post('log-print', [BadgeController::class, 'logPrint']);
|
||||
});
|
||||
|
||||
Route::prefix('class-prep')->group(function () {
|
||||
Route::get('/', [ClassPreparationController::class, 'index']);
|
||||
Route::post('mark-printed', [ClassPreparationController::class, 'markPrinted']);
|
||||
Route::post('adjustments', [ClassPreparationController::class, 'saveAdjustments']);
|
||||
Route::post('print/{classSectionId}/{schoolYear}', [ClassPreparationController::class, 'print']);
|
||||
Route::get('sticker-counts', [ClassPreparationController::class, 'stickerCounts']);
|
||||
Route::get('classes/{classSectionId}/students', [ClassPreparationController::class, 'studentsByClass']);
|
||||
});
|
||||
});
|
||||
|
||||
Executable → Regular
+72
-15
@@ -1,21 +1,78 @@
|
||||
<?php
|
||||
|
||||
use App\Http\Controllers\Api\Auth\AuthSessionController;
|
||||
use App\Http\Controllers\Api\Auth\SessionTimeoutController;
|
||||
use App\Http\Controllers\Api\System\DashboardRedirectController;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use App\Http\Controllers\View\DashboardRedirectController;
|
||||
use App\Services\Docs\OpenApiRouteExporter;
|
||||
|
||||
Route::redirect('/', '/api/docs')->name('docs.home');
|
||||
Route::view('/api/docs', 'docs.swagger')->name('docs.swagger');
|
||||
Route::get('/dashboard', [DashboardRedirectController::class, 'dashboard'])->name('dashboard.redirect');
|
||||
/*
|
||||
| Cookie session + browser-facing paths (SPA still calls same-origin /login, /logout, …).
|
||||
| All REST business logic lives under routes/api.php → /api, /api/v1.
|
||||
*/
|
||||
|
||||
Route::get('/api/documentation/swagger.json', function () {
|
||||
$path = resource_path('docs/openapi.json');
|
||||
abort_unless(is_file($path), 404);
|
||||
|
||||
$spec = app(OpenApiRouteExporter::class)->exportFromFile($path);
|
||||
|
||||
return response()->json($spec, 200, [
|
||||
'Content-Type' => 'application/json',
|
||||
'Cache-Control' => 'no-store, max-age=0',
|
||||
Route::get('/', function () {
|
||||
return response()->json([
|
||||
'status' => 'ok',
|
||||
'service' => config('app.name', 'api'),
|
||||
'docs' => url('/docs'),
|
||||
]);
|
||||
})->name('docs.swagger-json');
|
||||
})->name('api.home');
|
||||
|
||||
Route::get('docs', function () {
|
||||
$specUrl = url('/api/documentation/swagger.json');
|
||||
|
||||
$html = <<<HTML
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Alrahma API Docs</title>
|
||||
<link rel="stylesheet" href="https://unpkg.com/swagger-ui-dist@5/swagger-ui.css">
|
||||
<style>
|
||||
body { margin: 0; background: #ffffff; }
|
||||
#swagger-ui { min-height: 100vh; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="swagger-ui"></div>
|
||||
<script src="https://unpkg.com/swagger-ui-dist@5/swagger-ui-bundle.js"></script>
|
||||
<script>
|
||||
window.addEventListener('load', function () {
|
||||
SwaggerUIBundle({
|
||||
url: "{$specUrl}",
|
||||
dom_id: '#swagger-ui',
|
||||
operationsSorter: 'alpha',
|
||||
tagsSorter: 'alpha',
|
||||
docExpansion: 'none',
|
||||
defaultModelsExpandDepth: -1,
|
||||
persistAuthorization: true
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
HTML;
|
||||
|
||||
return response($html, 200)->header('Content-Type', 'text/html; charset=UTF-8');
|
||||
})->name('docs.ui');
|
||||
|
||||
Route::middleware('web')->group(function () {
|
||||
Route::get('login', [AuthSessionController::class, 'loginMask'])->name('login');
|
||||
Route::post('user/login', [AuthSessionController::class, 'login'])->name('auth.session.login');
|
||||
Route::get('logout', [AuthSessionController::class, 'logout'])->name('auth.session.logout');
|
||||
Route::get('select-role', [AuthSessionController::class, 'selectRole'])->name('auth.session.select-role');
|
||||
Route::post('set-role', [AuthSessionController::class, 'setRole'])->name('auth.session.set-role');
|
||||
|
||||
Route::get('session/check-timeout', [SessionTimeoutController::class, 'checkTimeout'])
|
||||
->name('auth.session.check-timeout');
|
||||
Route::get('session/check', [SessionTimeoutController::class, 'checkTimeout'])
|
||||
->name('auth.session.check');
|
||||
Route::post('session/ping', [SessionTimeoutController::class, 'pingActivity'])
|
||||
->name('auth.session.ping');
|
||||
Route::get('session/timeout-config', [SessionTimeoutController::class, 'getTimeoutConfig'])
|
||||
->name('auth.session.timeout-config');
|
||||
|
||||
Route::middleware('auth')->get('dashboard', [DashboardRedirectController::class, 'dashboard'])
|
||||
->name('dashboard.redirect');
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user