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.');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user