Files
laravel_school_api/app/Providers/SchoolCoreReportingServiceProvider.php
2026-05-30 01:11:35 -04:00

58 lines
3.2 KiB
PHP

<?php declare(strict_types=1);
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\Domain\SchoolCore\Reporting\Contracts\ReportRegistryContract;
use App\Domain\SchoolCore\Reporting\Contracts\ReportRunnerContract;
use App\Domain\SchoolCore\Reporting\Contracts\ReportAuthorizationPolicyContract;
use App\Domain\SchoolCore\Reporting\Contracts\ReportExportServiceContract;
use App\Domain\SchoolCore\Reporting\Contracts\ReportSnapshotServiceContract;
use App\Domain\SchoolCore\Reporting\Contracts\ScheduledReportServiceContract;
use App\Domain\SchoolCore\Reporting\Contracts\ReportAuditLoggerContract;
use App\Domain\SchoolCore\Reporting\Contracts\ReportCacheServiceContract;
use App\Domain\SchoolCore\Reporting\Services\ReportRegistry;
use App\Domain\SchoolCore\Reporting\Services\ReportRunner;
use App\Domain\SchoolCore\Reporting\Services\DefaultReportAuthorizationPolicy;
use App\Domain\SchoolCore\Reporting\Services\ReportExportService;
use App\Domain\SchoolCore\Reporting\Services\ReportSnapshotService;
use App\Domain\SchoolCore\Reporting\Services\ScheduledReportService;
use App\Domain\SchoolCore\Reporting\Services\ReportAuditLogger;
use App\Domain\SchoolCore\Reporting\Services\ReportCacheService;
use App\Domain\SchoolCore\Reporting\Reports\Students\{StudentRosterReport,StudentEnrollmentReport,GuardianContactReport};
use App\Domain\SchoolCore\Reporting\Reports\Attendance\{AttendanceSummaryReport,StudentAttendanceHistoryReport,StaffAttendanceSummaryReport};
use App\Domain\SchoolCore\Reporting\Reports\Finance\{InvoiceSummaryReport,OutstandingBalanceReport,PaymentSummaryReport};
use App\Domain\SchoolCore\Reporting\Reports\Communication\{MessageDeliveryReport,RecipientEngagementReport};
final class SchoolCoreReportingServiceProvider extends ServiceProvider
{
public function register(): void
{
$this->app->singleton(ReportRegistryContract::class, function ($app) {
$registry = new ReportRegistry();
foreach ($app->tagged('schoolcore.reports') as $report) { $registry->register($report); }
return $registry;
});
$this->app->bind(ReportRunnerContract::class, ReportRunner::class);
$this->app->bind(ReportAuthorizationPolicyContract::class, DefaultReportAuthorizationPolicy::class);
$this->app->bind(ReportExportServiceContract::class, ReportExportService::class);
$this->app->bind(ReportSnapshotServiceContract::class, ReportSnapshotService::class);
$this->app->bind(ScheduledReportServiceContract::class, ScheduledReportService::class);
$this->app->bind(ReportAuditLoggerContract::class, ReportAuditLogger::class);
$this->app->bind(ReportCacheServiceContract::class, ReportCacheService::class);
$this->app->tag([
StudentRosterReport::class,
StudentEnrollmentReport::class,
GuardianContactReport::class,
AttendanceSummaryReport::class,
StudentAttendanceHistoryReport::class,
StaffAttendanceSummaryReport::class,
InvoiceSummaryReport::class,
OutstandingBalanceReport::class,
PaymentSummaryReport::class,
MessageDeliveryReport::class,
RecipientEngagementReport::class,
], 'schoolcore.reports');
}
}