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'); } }