inti project
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
namespace App\Http\Controllers\Api\V2\Attendance;
|
||||
|
||||
use App\Domain\SchoolCore\Attendance\Contracts\ScannerServiceContract;
|
||||
use App\Domain\SchoolCore\Context\SchoolContextStore;
|
||||
use App\Http\Requests\Attendance\ProcessScanRequest;
|
||||
use App\Http\Resources\V2\Attendance\ScanResultResource;
|
||||
use App\Support\Api\ApiResponse;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Routing\Controller;
|
||||
|
||||
final class ScanController extends Controller
|
||||
{
|
||||
public function __construct(private readonly SchoolContextStore $context, private readonly ScannerServiceContract $scanner) {}
|
||||
|
||||
public function store(ProcessScanRequest $request): JsonResponse
|
||||
{
|
||||
$result = $this->scanner->processScan($this->context->current(), $request->toDTO());
|
||||
return ApiResponse::success((new ScanResultResource($result))->resolve($request), 'Scan processed.');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
namespace App\Http\Controllers\Api\V2;
|
||||
|
||||
use App\Domain\SchoolCore\Context\SchoolContext;
|
||||
use App\Domain\SchoolCore\Context\SchoolContextStore;
|
||||
use App\Support\Api\ApiResponse;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Routing\Controller;
|
||||
|
||||
abstract class BaseApiController extends Controller
|
||||
{
|
||||
public function __construct(protected readonly SchoolContextStore $schoolContext) {}
|
||||
|
||||
protected function context(): SchoolContext
|
||||
{
|
||||
return $this->schoolContext->current();
|
||||
}
|
||||
|
||||
protected function ok(mixed $data = null, ?string $message = null, array $meta = []): JsonResponse
|
||||
{
|
||||
return ApiResponse::success($data, $message, $meta);
|
||||
}
|
||||
|
||||
protected function created(mixed $data = null, ?string $message = null, array $meta = []): JsonResponse
|
||||
{
|
||||
return ApiResponse::success($data, $message, $meta, 201);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
namespace App\Http\Controllers\Api\V2\Communication;
|
||||
|
||||
use App\Domain\SchoolCore\Communication\Contracts\CommunicationServiceContract;
|
||||
use App\Domain\SchoolCore\Context\SchoolContextStore;
|
||||
use App\Http\Requests\Communication\BulkSendMessageRequest;
|
||||
use App\Http\Resources\V2\Communication\MessageResource;
|
||||
use App\Support\Api\ApiResponse;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Routing\Controller;
|
||||
|
||||
final class BulkSendController extends Controller
|
||||
{
|
||||
public function __construct(private readonly SchoolContextStore $context, private readonly CommunicationServiceContract $communication) {}
|
||||
|
||||
public function store(BulkSendMessageRequest $request): JsonResponse
|
||||
{
|
||||
$result = $this->communication->sendBulkMessage($this->context->current(), $request->toDTO());
|
||||
return ApiResponse::success((new MessageResource($result))->resolve($request), 'Bulk message accepted.');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
namespace App\Http\Controllers\Api\V2\Communication;
|
||||
|
||||
use App\Domain\SchoolCore\Communication\Contracts\RecipientPreviewServiceContract;
|
||||
use App\Domain\SchoolCore\Context\SchoolContextStore;
|
||||
use App\Http\Requests\Communication\RecipientPreviewRequest;
|
||||
use App\Http\Resources\V2\Communication\RecipientPreviewResource;
|
||||
use App\Support\Api\ApiResponse;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Routing\Controller;
|
||||
|
||||
final class RecipientPreviewController extends Controller
|
||||
{
|
||||
public function __construct(private readonly SchoolContextStore $context, private readonly RecipientPreviewServiceContract $previews) {}
|
||||
|
||||
public function store(RecipientPreviewRequest $request): JsonResponse
|
||||
{
|
||||
$result = $this->previews->preview($this->context->current(), $request->toDTO());
|
||||
return ApiResponse::success((new RecipientPreviewResource($result))->resolve($request), 'Recipient preview created.', [], 201);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
namespace App\Http\Controllers\Api\V2\Finance;
|
||||
|
||||
use App\Domain\SchoolCore\Context\SchoolContextStore;
|
||||
use App\Domain\SchoolCore\Finance\Contracts\PaymentServiceContract;
|
||||
use App\Http\Requests\Finance\EditPaymentRequest;
|
||||
use App\Http\Requests\Finance\RecordPaymentRequest;
|
||||
use App\Http\Resources\V2\Finance\PaymentResource;
|
||||
use App\Support\Api\ApiResponse;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Routing\Controller;
|
||||
|
||||
final class PaymentController extends Controller
|
||||
{
|
||||
public function __construct(private readonly SchoolContextStore $context, private readonly PaymentServiceContract $payments) {}
|
||||
|
||||
public function store(RecordPaymentRequest $request): JsonResponse
|
||||
{
|
||||
$result = $this->payments->recordPayment($this->context->current(), $request->toDTO());
|
||||
return ApiResponse::success((new PaymentResource($result))->resolve($request), 'Payment recorded.', [], 201);
|
||||
}
|
||||
|
||||
public function update(EditPaymentRequest $request, int $payment): JsonResponse
|
||||
{
|
||||
$result = $this->payments->editPayment($this->context->current(), $payment, $request->toDTO());
|
||||
return ApiResponse::success((new PaymentResource($result))->resolve($request), 'Payment updated.');
|
||||
}
|
||||
|
||||
public function reverse(EditPaymentRequest $request, int $payment): JsonResponse
|
||||
{
|
||||
$result = $this->payments->reversePayment($this->context->current(), $payment, (string) $request->validated('edit_reason', 'Reversed through API'));
|
||||
return ApiResponse::success((new PaymentResource($result))->resolve($request), 'Payment reversed.');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
namespace App\Http\Controllers\Api\V2\Finance;
|
||||
|
||||
use App\Domain\SchoolCore\Context\SchoolContextStore;
|
||||
use App\Domain\SchoolCore\Finance\Contracts\FinanceFileServiceContract;
|
||||
use App\Http\Requests\Finance\DownloadPaymentFileRequest;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Symfony\Component\HttpFoundation\BinaryFileResponse;
|
||||
|
||||
final class PaymentFileController extends Controller
|
||||
{
|
||||
public function __construct(private readonly SchoolContextStore $context, private readonly FinanceFileServiceContract $files) {}
|
||||
|
||||
public function show(DownloadPaymentFileRequest $request, int $payment): BinaryFileResponse
|
||||
{
|
||||
return $this->files->downloadPaymentFile($this->context->current(), $payment, (string) $request->validated('mode', 'download'));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
namespace App\Http\Controllers\Api\V2\IslamicSundaySchool;
|
||||
|
||||
use App\Domain\SchoolCore\Context\SchoolContextStore;
|
||||
use App\Domain\SchoolCore\Reporting\Contracts\ReportRunnerContract;
|
||||
use App\Domain\SchoolCore\Reporting\DTO\ReportRequestData;
|
||||
use App\Http\Resources\V2\IslamicSundaySchool\QuranProgressReportResource;
|
||||
use App\Support\Api\ApiResponse;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Routing\Controller;
|
||||
|
||||
final class QuranProgressController extends Controller
|
||||
{
|
||||
public function __construct(private readonly SchoolContextStore $context, private readonly ReportRunnerContract $reports) {}
|
||||
|
||||
public function index(): JsonResponse
|
||||
{
|
||||
$data = new ReportRequestData('islamic.quran_progress', [], null, null, null, null, false, null, null, false, []);
|
||||
$result = $this->reports->run($this->context->current(), $data);
|
||||
return ApiResponse::success((new QuranProgressReportResource($result))->resolve(request()));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
namespace App\Http\Controllers\Api\V2\Reporting;
|
||||
|
||||
use App\Domain\SchoolCore\Context\SchoolContextStore;
|
||||
use App\Domain\SchoolCore\Reporting\Contracts\ReportRegistryContract;
|
||||
use App\Domain\SchoolCore\Reporting\Contracts\ReportRunnerContract;
|
||||
use App\Http\Requests\Reporting\ListReportsRequest;
|
||||
use App\Http\Requests\Reporting\RunReportRequest;
|
||||
use App\Http\Resources\V2\Reporting\ReportResultResource;
|
||||
use App\Support\Api\ApiResponse;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Routing\Controller;
|
||||
|
||||
final class ReportController extends Controller
|
||||
{
|
||||
public function __construct(private readonly SchoolContextStore $context, private readonly ReportRegistryContract $registry, private readonly ReportRunnerContract $runner) {}
|
||||
|
||||
public function index(ListReportsRequest $request): JsonResponse
|
||||
{
|
||||
$reports = array_map(fn ($report) => [
|
||||
'key' => $report->key(),
|
||||
'name' => $report->name(),
|
||||
'category' => $report->category()->value,
|
||||
'visibility' => $report->visibility()->value,
|
||||
], $this->registry->availableReports($this->context->current()));
|
||||
|
||||
return ApiResponse::success($reports);
|
||||
}
|
||||
|
||||
public function run(RunReportRequest $request): JsonResponse
|
||||
{
|
||||
$result = $this->runner->run($this->context->current(), $request->toDTO());
|
||||
return ApiResponse::success((new ReportResultResource($result))->resolve($request));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
namespace App\Http\Controllers\Api\V2\Reporting;
|
||||
|
||||
use App\Domain\SchoolCore\Context\SchoolContextStore;
|
||||
use App\Domain\SchoolCore\Reporting\Contracts\ReportExportServiceContract;
|
||||
use App\Http\Requests\Reporting\ExportReportRequest;
|
||||
use App\Http\Resources\V2\Reporting\ReportExportResource;
|
||||
use App\Support\Api\ApiResponse;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Routing\Controller;
|
||||
|
||||
final class ReportExportController extends Controller
|
||||
{
|
||||
public function __construct(private readonly SchoolContextStore $context, private readonly ReportExportServiceContract $exports) {}
|
||||
|
||||
public function store(ExportReportRequest $request): JsonResponse
|
||||
{
|
||||
$result = $this->exports->export($this->context->current(), $request->toDTO());
|
||||
return ApiResponse::success((new ReportExportResource($result))->resolve($request), 'Report export created.');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
namespace App\Http\Controllers\Api\V2\Students;
|
||||
|
||||
use App\Domain\SchoolCore\Context\SchoolContextStore;
|
||||
use App\Domain\SchoolCore\Students\Contracts\StudentReadServiceContract;
|
||||
use App\Domain\SchoolCore\Students\Contracts\StudentServiceContract;
|
||||
use App\Http\Requests\Students\CreateStudentRequest;
|
||||
use App\Http\Requests\Students\StudentSearchRequest;
|
||||
use App\Http\Requests\Students\StudentStatusTransitionRequest;
|
||||
use App\Http\Requests\Students\UpdateStudentRequest;
|
||||
use App\Http\Resources\V2\Students\StudentResource;
|
||||
use App\Support\Api\ApiResponse;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Routing\Controller;
|
||||
|
||||
final class StudentController extends Controller
|
||||
{
|
||||
public function __construct(private readonly SchoolContextStore $context, private readonly StudentServiceContract $students, private readonly StudentReadServiceContract $reader) {}
|
||||
|
||||
public function index(StudentSearchRequest $request): JsonResponse
|
||||
{
|
||||
$result = $this->reader->search($this->context->current(), $request->toDTO());
|
||||
return ApiResponse::success($result);
|
||||
}
|
||||
|
||||
public function store(CreateStudentRequest $request): JsonResponse
|
||||
{
|
||||
$result = $this->students->createStudent($this->context->current(), $request->toDTO());
|
||||
return ApiResponse::success((new StudentResource($result))->resolve($request), 'Student created.', [], 201);
|
||||
}
|
||||
|
||||
public function show(int $student): JsonResponse
|
||||
{
|
||||
$result = $this->students->getStudent($this->context->current(), $student);
|
||||
return ApiResponse::success((new StudentResource($result))->resolve(request()));
|
||||
}
|
||||
|
||||
public function update(UpdateStudentRequest $request, int $student): JsonResponse
|
||||
{
|
||||
$result = $this->students->updateStudent($this->context->current(), $student, $request->toDTO());
|
||||
return ApiResponse::success((new StudentResource($result))->resolve($request), 'Student updated.');
|
||||
}
|
||||
|
||||
public function transition(StudentStatusTransitionRequest $request, int $student): JsonResponse
|
||||
{
|
||||
$result = $this->students->transitionStatus($this->context->current(), $student, $request->toDTO());
|
||||
return ApiResponse::success((new StudentResource($result))->resolve($request), 'Student status changed.');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Http\Controllers\Attendance;
|
||||
|
||||
use App\Domain\SchoolCore\Attendance\Contracts\ScannerServiceContract;
|
||||
use App\Domain\SchoolCore\Context\SchoolContext;
|
||||
use App\Http\Requests\Attendance\ProcessScanRequest;
|
||||
use Illuminate\Routing\Controller;
|
||||
|
||||
final class ScannerController extends Controller
|
||||
{
|
||||
public function __construct(private ScannerServiceContract $scanner) {}
|
||||
|
||||
public function __invoke(ProcessScanRequest $request)
|
||||
{
|
||||
/** @var SchoolContext $context */
|
||||
$context = $request->attributes->get(SchoolContext::class);
|
||||
|
||||
$result = $this->scanner->processScan($context, $request->toDTO());
|
||||
|
||||
return response()->json($result->toArray());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Http\Controllers\Attendance;
|
||||
|
||||
use App\Domain\SchoolCore\Attendance\Contracts\StaffAttendanceServiceContract;
|
||||
use App\Domain\SchoolCore\Context\SchoolContext;
|
||||
use App\Http\Requests\Attendance\RecordStaffAttendanceRequest;
|
||||
use Illuminate\Routing\Controller;
|
||||
|
||||
final class StaffAttendanceController extends Controller
|
||||
{
|
||||
public function __construct(private StaffAttendanceServiceContract $staff) {}
|
||||
|
||||
public function store(RecordStaffAttendanceRequest $request)
|
||||
{
|
||||
/** @var SchoolContext $context */
|
||||
$context = $request->attributes->get(SchoolContext::class);
|
||||
$result = $this->staff->recordStaffAttendance($context, $request->toDTO());
|
||||
|
||||
return response()->json(['data' => $result]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Http\Controllers\Attendance;
|
||||
|
||||
use App\Domain\SchoolCore\Attendance\Contracts\StudentAttendanceServiceContract;
|
||||
use App\Domain\SchoolCore\Context\SchoolContext;
|
||||
use App\Http\Requests\Attendance\RecordStudentAttendanceRequest;
|
||||
use Illuminate\Routing\Controller;
|
||||
|
||||
final class StudentAttendanceController extends Controller
|
||||
{
|
||||
public function __construct(private StudentAttendanceServiceContract $students) {}
|
||||
|
||||
public function store(RecordStudentAttendanceRequest $request)
|
||||
{
|
||||
/** @var SchoolContext $context */
|
||||
$context = $request->attributes->get(SchoolContext::class);
|
||||
$result = $this->students->recordStudentAttendance($context, $request->toDTO());
|
||||
|
||||
return response()->json(['data' => $result]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
<?php declare(strict_types=1); namespace App\Http\Controllers\Communication; use Illuminate\Routing\Controller; use App\Domain\SchoolCore\Communication\Contracts\CommunicationServiceContract; final class BulkMessageController extends Controller { public function __construct(private CommunicationServiceContract $messages) {} public function send(): array { return ['status'=>'delegated']; } }
|
||||
@@ -0,0 +1 @@
|
||||
<?php declare(strict_types=1); namespace App\Http\Controllers\Communication; use Illuminate\Routing\Controller; use App\Domain\SchoolCore\Communication\Contracts\MessageTemplateServiceContract; final class MessageTemplateController extends Controller { public function __construct(private MessageTemplateServiceContract $templates) {} public function store(): array { return ['status'=>'delegated']; } }
|
||||
@@ -0,0 +1 @@
|
||||
<?php declare(strict_types=1); namespace App\Http\Controllers\Communication; use Illuminate\Routing\Controller; use App\Domain\SchoolCore\Communication\Contracts\RecipientPreviewServiceContract; final class RecipientPreviewController extends Controller { public function __construct(private RecipientPreviewServiceContract $previews) {} public function store(): array { return ['status'=>'preview-required']; } }
|
||||
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Http\Controllers\Finance;
|
||||
|
||||
use App\Domain\SchoolCore\Context\SchoolContext;
|
||||
use App\Domain\SchoolCore\Finance\Contracts\FinanceFileServiceContract;
|
||||
use App\Http\Requests\Finance\DownloadPaymentFileRequest;
|
||||
|
||||
final class PaymentFileController
|
||||
{
|
||||
public function __construct(private readonly FinanceFileServiceContract $files) {}
|
||||
public function show(DownloadPaymentFileRequest $request, int $payment)
|
||||
{
|
||||
/** @var SchoolContext $context */
|
||||
$context = $request->attributes->get(SchoolContext::class);
|
||||
return $this->files->downloadPaymentFile($context, $payment, $request->mode());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
<?php declare(strict_types=1);
|
||||
namespace App\Http\Controllers\Reporting;
|
||||
|
||||
use App\Domain\SchoolCore\Context\SchoolContext;
|
||||
use App\Domain\SchoolCore\Reporting\Contracts\ReportRegistryContract;
|
||||
use App\Domain\SchoolCore\Reporting\Contracts\ReportRunnerContract;
|
||||
use App\Http\Requests\Reporting\RunReportRequest;
|
||||
use Illuminate\Routing\Controller;
|
||||
|
||||
final class ReportController extends Controller
|
||||
{
|
||||
public function __construct(private readonly ReportRunnerContract $runner, private readonly ReportRegistryContract $registry) {}
|
||||
|
||||
public function index(RunReportRequest $request): array
|
||||
{
|
||||
/** @var SchoolContext $context */
|
||||
$context = $request->attributes->get(SchoolContext::class);
|
||||
return ['reports' => array_map(fn ($report) => ['key' => $report->key(), 'name' => $report->name()], $this->registry->availableReports($context))];
|
||||
}
|
||||
|
||||
public function run(RunReportRequest $request): array
|
||||
{
|
||||
/** @var SchoolContext $context */
|
||||
$context = $request->attributes->get(SchoolContext::class);
|
||||
$result = $this->runner->run($context, $request->toDTO());
|
||||
return ['data' => $result];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
<?php declare(strict_types=1);
|
||||
namespace App\Http\Controllers\Reporting;
|
||||
|
||||
use App\Domain\SchoolCore\Context\SchoolContext;
|
||||
use App\Domain\SchoolCore\Reporting\Contracts\ReportExportServiceContract;
|
||||
use App\Http\Requests\Reporting\ExportReportRequest;
|
||||
use Illuminate\Routing\Controller;
|
||||
|
||||
final class ReportExportController extends Controller
|
||||
{
|
||||
public function __construct(private readonly ReportExportServiceContract $exports) {}
|
||||
public function export(ExportReportRequest $request): array
|
||||
{
|
||||
/** @var SchoolContext $context */
|
||||
$context = $request->attributes->get(SchoolContext::class);
|
||||
return ['export' => $this->exports->export($context, $request->toDTO())];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
<?php declare(strict_types=1);
|
||||
namespace App\Http\Controllers\Reporting;
|
||||
|
||||
use App\Domain\SchoolCore\Context\SchoolContext;
|
||||
use App\Domain\SchoolCore\Reporting\Contracts\ScheduledReportServiceContract;
|
||||
use App\Http\Requests\Reporting\ScheduleReportRequest;
|
||||
use Illuminate\Routing\Controller;
|
||||
|
||||
final class ScheduledReportController extends Controller
|
||||
{
|
||||
public function __construct(private readonly ScheduledReportServiceContract $scheduled) {}
|
||||
public function store(ScheduleReportRequest $request): array
|
||||
{
|
||||
/** @var SchoolContext $context */
|
||||
$context = $request->attributes->get(SchoolContext::class);
|
||||
return ['scheduled_report' => $this->scheduled->schedule($context, $request->toDTO())];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Domain\SchoolCore\Context\SchoolContext;
|
||||
use App\Domain\SchoolCore\Contracts\StudentServiceContract;
|
||||
use App\Domain\SchoolCore\Students\Data\CreateStudentData;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
final class StudentCreateController
|
||||
{
|
||||
public function __construct(private readonly StudentServiceContract $students) {}
|
||||
|
||||
public function __invoke(Request $request): JsonResponse
|
||||
{
|
||||
/** @var SchoolContext $context */
|
||||
$context = $request->attributes->get(SchoolContext::class);
|
||||
$student = $this->students->create($context, new CreateStudentData(method_exists($request, 'validated') ? $request->validated() : $request->all()));
|
||||
|
||||
return response()->json($student->attributes, 201);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
namespace App\Http\Controllers\Students;
|
||||
use App\Domain\SchoolCore\Context\SchoolContext; use App\Domain\SchoolCore\Students\Contracts\AssignmentServiceContract; use App\Http\Requests\Students\AssignmentRequest; use Illuminate\Http\Request; use Illuminate\Routing\Controller;
|
||||
final class AssignmentController extends Controller { public function __construct(private readonly AssignmentServiceContract $assignments){} public function store(AssignmentRequest $request): array { $context=$request->attributes->get(SchoolContext::class); return ['data'=>$this->assignments->assignStudent($context,$request->toDTO())]; } public function destroy(Request $request,int $assignment): array { $context=$request->attributes->get(SchoolContext::class); return ['data'=>$this->assignments->unassignStudent($context,$assignment,(string)$request->input('reason','unassign student'))]; } }
|
||||
@@ -0,0 +1,5 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
namespace App\Http\Controllers\Students;
|
||||
use App\Domain\SchoolCore\Context\SchoolContext; use App\Domain\SchoolCore\Students\Contracts\EnrollmentServiceContract; use App\Http\Requests\Students\EnrollmentRequest; use Illuminate\Http\Request; use Illuminate\Routing\Controller;
|
||||
final class EnrollmentController extends Controller { public function __construct(private readonly EnrollmentServiceContract $enrollments){} public function store(EnrollmentRequest $request): array { $context=$request->attributes->get(SchoolContext::class); return ['data'=>$this->enrollments->enrollStudent($context,$request->toDTO())]; } public function withdraw(Request $request,int $student): array { $context=$request->attributes->get(SchoolContext::class); return ['data'=>$this->enrollments->withdrawStudent($context,$student,(string)$request->input('reason','withdrawal'))]; } }
|
||||
@@ -0,0 +1,5 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
namespace App\Http\Controllers\Students;
|
||||
use App\Domain\SchoolCore\Context\SchoolContext; use App\Domain\SchoolCore\Students\Contracts\GuardianServiceContract; use App\Http\Requests\Students\CreateGuardianRequest; use App\Http\Requests\Students\LinkGuardianRequest; use Illuminate\Http\Request; use Illuminate\Routing\Controller;
|
||||
final class GuardianController extends Controller { public function __construct(private readonly GuardianServiceContract $guardians){} public function store(CreateGuardianRequest $request): array { $context=$request->attributes->get(SchoolContext::class); return ['data'=>$this->guardians->createGuardian($context,$request->toDTO())]; } public function link(LinkGuardianRequest $request): array { $context=$request->attributes->get(SchoolContext::class); return ['data'=>$this->guardians->linkGuardianToStudent($context,$request->toDTO())]; } public function unlink(Request $request,int $student,int $guardian): array { $context=$request->attributes->get(SchoolContext::class); return ['data'=>$this->guardians->unlinkGuardianFromStudent($context,$student,$guardian,(string)$request->input('reason','unlink guardian'))]; } }
|
||||
@@ -0,0 +1,5 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
namespace App\Http\Controllers\Students;
|
||||
use App\Domain\IslamicSundaySchool\Students\Services\IslamicSundaySchoolStudentProfileService; use App\Domain\SchoolCore\Context\SchoolContext; use App\Http\Requests\Students\IslamicSundaySchoolStudentProfileRequest; use Illuminate\Routing\Controller;
|
||||
final class IslamicSundaySchoolStudentProfileController extends Controller { public function __construct(private readonly IslamicSundaySchoolStudentProfileService $profiles){} public function store(IslamicSundaySchoolStudentProfileRequest $request): array { $context=$request->attributes->get(SchoolContext::class); return ['data'=>$this->profiles->save($context,$request->toDTO())]; } }
|
||||
@@ -0,0 +1,5 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
namespace App\Http\Controllers\Students;
|
||||
use App\Domain\SchoolCore\Context\SchoolContext; use App\Domain\SchoolCore\Students\Contracts\PromotionServiceContract; use App\Http\Requests\Students\BulkPromotionRequest; use App\Http\Requests\Students\PromotionRequest; use Illuminate\Http\Request; use Illuminate\Routing\Controller;
|
||||
final class PromotionController extends Controller { public function __construct(private readonly PromotionServiceContract $promotions){} public function evaluate(Request $request,int $student): array { $context=$request->attributes->get(SchoolContext::class); return ['data'=>$this->promotions->evaluatePromotion($context,$student)]; } public function promote(PromotionRequest $request): array { $context=$request->attributes->get(SchoolContext::class); return ['data'=>$this->promotions->promoteStudent($context,$request->toDTO())]; } public function bulk(BulkPromotionRequest $request): array { $context=$request->attributes->get(SchoolContext::class); return ['data'=>$this->promotions->bulkPromote($context,$request->toDTO())]; } }
|
||||
@@ -0,0 +1,5 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
namespace App\Http\Controllers\Students;
|
||||
use App\Domain\SchoolCore\Context\SchoolContext; use App\Domain\SchoolCore\Students\Contracts\StudentReadServiceContract; use App\Domain\SchoolCore\Students\Contracts\StudentServiceContract; use App\Http\Requests\Students\CreateStudentRequest; use App\Http\Requests\Students\StudentSearchRequest; use App\Http\Requests\Students\StudentStatusTransitionRequest; use App\Http\Requests\Students\UpdateStudentRequest; use Illuminate\Routing\Controller;
|
||||
final class StudentLifecycleController extends Controller { public function __construct(private readonly StudentServiceContract $students, private readonly StudentReadServiceContract $reads){} public function store(CreateStudentRequest $request): array { $context=$request->attributes->get(SchoolContext::class); return ['data'=>$this->students->createStudent($context,$request->toDTO())]; } public function show(CreateStudentRequest $request,int $student): array { $context=$request->attributes->get(SchoolContext::class); return ['data'=>$this->students->getStudent($context,$student)]; } public function update(UpdateStudentRequest $request,int $student): array { $context=$request->attributes->get(SchoolContext::class); return ['data'=>$this->students->updateStudent($context,$student,$request->toDTO())]; } public function transition(StudentStatusTransitionRequest $request,int $student): array { $context=$request->attributes->get(SchoolContext::class); return ['data'=>$this->students->transitionStatus($context,$student,$request->toDTO())]; } public function index(StudentSearchRequest $request): array { $context=$request->attributes->get(SchoolContext::class); return ['data'=>$this->reads->search($context,$request->toDTO())]; } }
|
||||
Reference in New Issue
Block a user