update project

This commit is contained in:
root
2026-05-30 01:11:35 -04:00
parent 3a0628ecc7
commit 2225f6bc72
9743 changed files with 1122482 additions and 59 deletions
+38
View File
@@ -0,0 +1,38 @@
<?php
use App\Http\Controllers\Api\Integration\SchoolWorkflowController;
use Illuminate\Support\Facades\Route;
Route::post('/schools', [SchoolWorkflowController::class, 'storeSchool']);
Route::middleware(['auth', 'school.access'])->group(function (): void {
Route::get('/schools/{school}', [SchoolWorkflowController::class, 'showSchool']);
Route::post('/schools/{school}/students', [SchoolWorkflowController::class, 'storeStudent']);
Route::get('/schools/{school}/students/{student}', [SchoolWorkflowController::class, 'showStudent']);
Route::post('/schools/{school}/attendance/scans', [SchoolWorkflowController::class, 'storeAttendanceScan']);
Route::post('/schools/{school}/communications/preview', [SchoolWorkflowController::class, 'previewCommunication']);
Route::post('/schools/{school}/communications/send', [SchoolWorkflowController::class, 'sendCommunication']);
Route::post('/schools/{school}/finance/payment-files', [SchoolWorkflowController::class, 'storePaymentFile']);
Route::get('/schools/{school}/reports/daily', [SchoolWorkflowController::class, 'dailyReport']);
});
Route::get('/health', function () {
return response()->json([
'success' => true,
'message' => 'Laravel school API is running.',
]);
});
Route::prefix('v1')->group(function () {
require __DIR__.'/finance_phase3.php';
require __DIR__.'/attendance_phase4.php';
require __DIR__.'/student_lifecycle_phase5.php';
require __DIR__.'/communication_phase6.php';
require __DIR__.'/reporting_phase7.php';
require __DIR__.'/api_phase8.php';
});
+38
View File
@@ -0,0 +1,38 @@
<?php
use App\Http\Controllers\Api\V2\Attendance\ScanController;
use App\Http\Controllers\Api\V2\Communication\BulkSendController;
use App\Http\Controllers\Api\V2\Communication\RecipientPreviewController;
use App\Http\Controllers\Api\V2\Finance\PaymentController;
use App\Http\Controllers\Api\V2\Finance\PaymentFileController;
use App\Http\Controllers\Api\V2\IslamicSundaySchool\QuranProgressController;
use App\Http\Controllers\Api\V2\Reporting\ReportController;
use App\Http\Controllers\Api\V2\Reporting\ReportExportController;
use App\Http\Controllers\Api\V2\Students\StudentController;
use Illuminate\Support\Facades\Route;
Route::middleware(['auth:api', 'school.context'])->prefix('api/v2')->name('api.v2.')->group(function (): void {
Route::apiResource('students', StudentController::class)->only(['index', 'store', 'show', 'update']);
Route::post('students/{student}/status-transitions', [StudentController::class, 'transition'])->name('students.status-transitions.store');
Route::post('finance/payments', [PaymentController::class, 'store'])->name('finance.payments.store');
Route::patch('finance/payments/{payment}', [PaymentController::class, 'update'])->name('finance.payments.update');
Route::post('finance/payments/{payment}/reverse', [PaymentController::class, 'reverse'])->name('finance.payments.reverse');
Route::get('finance/payments/{payment}/file', [PaymentFileController::class, 'show'])->name('finance.payments.file');
Route::post('attendance/scans', [ScanController::class, 'store'])->name('attendance.scans.store');
Route::post('communication/recipient-previews', [RecipientPreviewController::class, 'store'])->name('communication.recipient-previews.store');
Route::post('communication/bulk-sends', [BulkSendController::class, 'store'])->name('communication.bulk-sends.store');
Route::get('reporting/reports', [ReportController::class, 'index'])->name('reporting.reports.index');
Route::post('reporting/reports/run', [ReportController::class, 'run'])->name('reporting.reports.run');
Route::post('reporting/exports', [ReportExportController::class, 'store'])->name('reporting.exports.store');
Route::middleware(['ensure.domain.profile:islamic_sunday_school'])
->prefix('islamic-sunday-school')
->name('islamic-sunday-school.')
->group(function (): void {
Route::get('quran-progress', [QuranProgressController::class, 'index'])->name('quran-progress.index');
});
});
+15
View File
@@ -0,0 +1,15 @@
<?php
declare(strict_types=1);
use App\Http\Controllers\Attendance\ScannerController;
use App\Http\Controllers\Attendance\StaffAttendanceController;
use App\Http\Controllers\Attendance\StudentAttendanceController;
use App\Http\Middleware\ResolveSchoolContext;
use Illuminate\Support\Facades\Route;
Route::middleware(['auth:api', ResolveSchoolContext::class])->prefix('api/attendance')->group(function (): void {
Route::post('scan', ScannerController::class)->name('attendance.scan.process');
Route::post('students', [StudentAttendanceController::class, 'store'])->name('attendance.students.record');
Route::post('staff', [StaffAttendanceController::class, 'store'])->name('attendance.staff.record');
});
+3
View File
@@ -0,0 +1,3 @@
<?php
use Illuminate\Support\Facades\Route; use App\Http\Middleware\ResolveSchoolContext; use App\Http\Controllers\Communication\{RecipientPreviewController,BulkMessageController,MessageTemplateController};
Route::middleware(['auth:api', ResolveSchoolContext::class])->prefix('api/communication')->group(function (): void { Route::post('/recipient-previews', [RecipientPreviewController::class, 'store']); Route::post('/bulk-send', [BulkMessageController::class, 'send']); Route::post('/templates', [MessageTemplateController::class, 'store']); });
+9
View File
@@ -0,0 +1,9 @@
<?php
use App\Http\Controllers\Finance\PaymentFileController;
use Illuminate\Support\Facades\Route;
Route::middleware(['auth:api', 'school.context'])->prefix('api/finance')->group(function (): void {
Route::get('payments/{payment}/file', [PaymentFileController::class, 'show'])->whereNumber('payment')->name('finance.payments.file.show');
// Deprecated compatibility marker: do not enable filename-only finance downloads.
});
+13
View File
@@ -0,0 +1,13 @@
<?php
use App\Http\Controllers\Reporting\ReportController;
use App\Http\Controllers\Reporting\ReportExportController;
use App\Http\Controllers\Reporting\ScheduledReportController;
use Illuminate\Support\Facades\Route;
Route::middleware(['auth:api', 'school.context'])->prefix('api/reports')->group(function (): void {
Route::get('/', [ReportController::class, 'index']);
Route::post('/run', [ReportController::class, 'run']);
Route::post('/export', [ReportExportController::class, 'export']);
Route::post('/schedule', [ScheduledReportController::class, 'store']);
});
+11
View File
@@ -0,0 +1,11 @@
<?php
use App\Domain\SchoolCore\Payments\PaymentFileController;
use App\Domain\SchoolCore\Students\StudentReadController;
use Illuminate\Support\Facades\Route;
Route::middleware(['auth:api', 'school.context'])->group(function (): void {
Route::get('/students', [StudentReadController::class, 'index']);
Route::get('/students/{student}', [StudentReadController::class, 'show']);
Route::get('/payments/{payment}/files/{file}', [PaymentFileController::class, 'show']);
});
+3
View File
@@ -0,0 +1,3 @@
<?php
use App\Http\Controllers\Students\AssignmentController; use App\Http\Controllers\Students\EnrollmentController; use App\Http\Controllers\Students\GuardianController; use App\Http\Controllers\Students\IslamicSundaySchoolStudentProfileController; use App\Http\Controllers\Students\PromotionController; use App\Http\Controllers\Students\StudentLifecycleController; use Illuminate\Support\Facades\Route;
Route::middleware(['auth:api','school.context'])->prefix('api/students')->group(function(): void { Route::get('/',[StudentLifecycleController::class,'index']); Route::post('/',[StudentLifecycleController::class,'store']); Route::get('/{student}',[StudentLifecycleController::class,'show']); Route::patch('/{student}',[StudentLifecycleController::class,'update']); Route::post('/{student}/status',[StudentLifecycleController::class,'transition']); Route::post('/guardians',[GuardianController::class,'store']); Route::post('/guardians/link',[GuardianController::class,'link']); Route::delete('/{student}/guardians/{guardian}',[GuardianController::class,'unlink']); Route::post('/enrollments',[EnrollmentController::class,'store']); Route::post('/{student}/withdraw',[EnrollmentController::class,'withdraw']); Route::post('/assignments',[AssignmentController::class,'store']); Route::delete('/assignments/{assignment}',[AssignmentController::class,'destroy']); Route::get('/{student}/promotion',[PromotionController::class,'evaluate']); Route::post('/promotion',[PromotionController::class,'promote']); Route::post('/promotion/bulk',[PromotionController::class,'bulk']); Route::post('/islamic-sunday-school/profile',[IslamicSundaySchoolStudentProfileController::class,'store']); });
+10
View File
@@ -0,0 +1,10 @@
<?php
use Illuminate\Support\Facades\Route;
Route::get('/', function () {
return response()->json([
'success' => true,
'message' => 'Laravel school API is running.',
]);
});