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
+26
View File
@@ -0,0 +1,26 @@
<?php
declare(strict_types=1);
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
public function register(): void
{
$this->app->register(SchoolContextServiceProvider::class);
$this->app->register(SchoolCoreAttendanceServiceProvider::class);
$this->app->register(SchoolCoreFinanceServiceProvider::class);
$this->app->register(SchoolCoreStudentServiceProvider::class);
$this->app->register(SchoolCoreCommunicationServiceProvider::class);
$this->app->register(SchoolCoreReportingServiceProvider::class);
$this->app->register(IslamicSundaySchoolServiceProvider::class);
}
public function boot(): void
{
//
}
}
@@ -0,0 +1,27 @@
<?php
declare(strict_types=1);
namespace App\Providers;
use App\Domain\IslamicSundaySchool\Attendance\IslamicSundaySchoolAttendancePolicy;
use App\Domain\IslamicSundaySchool\Policies\IslamicSundaySchoolPaymentAllocationPolicy;
use App\Domain\IslamicSundaySchool\Providers\IslamicSundaySchoolCalendarProvider;
use App\Domain\SchoolCore\Contracts\AcademicCalendarProviderContract;
use App\Domain\SchoolCore\Contracts\AttendancePolicyContract;
use App\Domain\SchoolCore\Contracts\PaymentAllocationPolicyContract;
use Illuminate\Support\ServiceProvider;
final class IslamicSundaySchoolServiceProvider extends ServiceProvider
{
public function register(): void
{
if (! (bool) config('school_context.extensions.islamic_sunday_school.enabled', false)) {
return;
}
$this->app->bind(AttendancePolicyContract::class, IslamicSundaySchoolAttendancePolicy::class);
$this->app->bind(AcademicCalendarProviderContract::class, IslamicSundaySchoolCalendarProvider::class);
$this->app->bind(PaymentAllocationPolicyContract::class, IslamicSundaySchoolPaymentAllocationPolicy::class);
}
}
@@ -0,0 +1,36 @@
<?php
declare(strict_types=1);
namespace App\Providers;
use App\Domain\SchoolCore\Context\SchoolContextFactory;
use App\Domain\SchoolCore\Context\SchoolContextResolver;
use App\Domain\SchoolCore\Context\SchoolContextStore;
use App\Domain\SchoolCore\Context\SchoolContextValidator;
use App\Http\Middleware\ResolveSchoolContext;
use Illuminate\Contracts\Http\Kernel;
use Illuminate\Support\ServiceProvider;
final class SchoolContextServiceProvider extends ServiceProvider
{
public function register(): void
{
$this->mergeConfigFrom(__DIR__ . '/../../config/school_context.php', 'school_context');
$this->app->singleton(SchoolContextStore::class);
$this->app->bind(SchoolContextFactory::class);
$this->app->bind(SchoolContextResolver::class);
$this->app->bind(SchoolContextValidator::class);
}
public function boot(Kernel $kernel): void
{
$this->publishes([
__DIR__ . '/../../config/school_context.php' => config_path('school_context.php'),
], 'school-context-config');
// Laravel 10/older: also register alias in app/Http/Kernel.php if preferred.
app('router')->aliasMiddleware('school.context', ResolveSchoolContext::class);
}
}
@@ -0,0 +1,44 @@
<?php
declare(strict_types=1);
namespace App\Providers;
use App\Domain\SchoolCore\Attendance\Contracts\AttendanceAuditLoggerContract;
use App\Domain\SchoolCore\Attendance\Contracts\AttendanceIdempotencyServiceContract;
use App\Domain\SchoolCore\Attendance\Contracts\AttendancePolicyContract;
use App\Domain\SchoolCore\Attendance\Contracts\AttendanceServiceContract;
use App\Domain\SchoolCore\Attendance\Contracts\AttendanceSessionResolverContract;
use App\Domain\SchoolCore\Attendance\Contracts\AttendanceStatusPolicyContract;
use App\Domain\SchoolCore\Attendance\Contracts\BadgeLookupServiceContract;
use App\Domain\SchoolCore\Attendance\Contracts\ScannerServiceContract;
use App\Domain\SchoolCore\Attendance\Contracts\StaffAttendanceServiceContract;
use App\Domain\SchoolCore\Attendance\Contracts\StudentAttendanceServiceContract;
use App\Domain\SchoolCore\Attendance\Policies\DefaultAttendancePolicy;
use App\Domain\SchoolCore\Attendance\Policies\DefaultAttendanceStatusPolicy;
use App\Domain\SchoolCore\Attendance\Services\AttendanceAuditLogger;
use App\Domain\SchoolCore\Attendance\Services\AttendanceIdempotencyService;
use App\Domain\SchoolCore\Attendance\Services\AttendanceService;
use App\Domain\SchoolCore\Attendance\Services\AttendanceSessionResolver;
use App\Domain\SchoolCore\Attendance\Services\BadgeLookupService;
use App\Domain\SchoolCore\Attendance\Services\ScannerService;
use App\Domain\SchoolCore\Attendance\Services\StaffAttendanceService;
use App\Domain\SchoolCore\Attendance\Services\StudentAttendanceService;
use Illuminate\Support\ServiceProvider;
final class SchoolCoreAttendanceServiceProvider extends ServiceProvider
{
public function register(): void
{
$this->app->bind(ScannerServiceContract::class, ScannerService::class);
$this->app->bind(AttendanceServiceContract::class, AttendanceService::class);
$this->app->bind(BadgeLookupServiceContract::class, BadgeLookupService::class);
$this->app->bind(StudentAttendanceServiceContract::class, StudentAttendanceService::class);
$this->app->bind(StaffAttendanceServiceContract::class, StaffAttendanceService::class);
$this->app->bind(AttendanceSessionResolverContract::class, AttendanceSessionResolver::class);
$this->app->bind(AttendanceStatusPolicyContract::class, DefaultAttendanceStatusPolicy::class);
$this->app->bind(AttendancePolicyContract::class, DefaultAttendancePolicy::class);
$this->app->bind(AttendanceAuditLoggerContract::class, AttendanceAuditLogger::class);
$this->app->bind(AttendanceIdempotencyServiceContract::class, AttendanceIdempotencyService::class);
}
}
@@ -0,0 +1,9 @@
<?php declare(strict_types=1);
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\Domain\SchoolCore\Communication\Contracts\{CommunicationServiceContract,RecipientPreviewServiceContract,RecipientDedupeServiceContract,CommunicationPreferencePolicyContract,ChannelRouterContract,EmailChannelContract,SmsChannelContract,WhatsAppChannelContract,NotificationChannelContract,MessageTemplateServiceContract,DeliveryStatusServiceContract,CommunicationAuditLoggerContract,CommunicationIdempotencyServiceContract};
use App\Domain\SchoolCore\Communication\Services\{CommunicationService,RecipientPreviewService,RecipientDedupeService,ChannelRouter,MessageTemplateService,DeliveryStatusService,CommunicationAuditLogger,CommunicationIdempotencyService};
use App\Domain\SchoolCore\Communication\Policies\DefaultCommunicationPreferencePolicy;
use App\Domain\SchoolCore\Communication\Channels\{EmailChannel,SmsChannel,WhatsAppChannel,NotificationChannel};
use App\Domain\SchoolCore\Communication\Resolvers\{StudentRecipientResolver,GuardianRecipientResolver,StaffRecipientResolver,ClassRecipientResolver,SchoolWideRecipientResolver};
final class SchoolCoreCommunicationServiceProvider extends ServiceProvider { public function register(): void { $this->app->bind(CommunicationServiceContract::class, CommunicationService::class); $this->app->bind(RecipientPreviewServiceContract::class, RecipientPreviewService::class); $this->app->bind(RecipientDedupeServiceContract::class, RecipientDedupeService::class); $this->app->bind(CommunicationPreferencePolicyContract::class, DefaultCommunicationPreferencePolicy::class); $this->app->bind(ChannelRouterContract::class, ChannelRouter::class); $this->app->bind(EmailChannelContract::class, EmailChannel::class); $this->app->bind(SmsChannelContract::class, SmsChannel::class); $this->app->bind(WhatsAppChannelContract::class, WhatsAppChannel::class); $this->app->bind(NotificationChannelContract::class, NotificationChannel::class); $this->app->bind(MessageTemplateServiceContract::class, MessageTemplateService::class); $this->app->bind(DeliveryStatusServiceContract::class, DeliveryStatusService::class); $this->app->bind(CommunicationAuditLoggerContract::class, CommunicationAuditLogger::class); $this->app->bind(CommunicationIdempotencyServiceContract::class, CommunicationIdempotencyService::class); $this->app->tag([StudentRecipientResolver::class,GuardianRecipientResolver::class,StaffRecipientResolver::class,ClassRecipientResolver::class,SchoolWideRecipientResolver::class], 'communication.recipient_resolvers'); $this->app->when(RecipientPreviewService::class)->needs('$resolvers')->giveTagged('communication.recipient_resolvers'); } }
@@ -0,0 +1,38 @@
<?php
declare(strict_types=1);
namespace App\Providers;
use App\Domain\SchoolCore\Finance\Contracts\ChargeServiceContract;
use App\Domain\SchoolCore\Finance\Contracts\FinanceAuditLoggerContract;
use App\Domain\SchoolCore\Finance\Contracts\FinanceFileServiceContract;
use App\Domain\SchoolCore\Finance\Contracts\InvoiceServiceContract;
use App\Domain\SchoolCore\Finance\Contracts\PaymentAllocationPolicyContract;
use App\Domain\SchoolCore\Finance\Contracts\PaymentServiceContract;
use App\Domain\SchoolCore\Finance\Contracts\RefundServiceContract;
use App\Domain\SchoolCore\Finance\Contracts\TuitionPolicyContract;
use App\Domain\SchoolCore\Finance\Policies\DefaultPaymentAllocationPolicy;
use App\Domain\SchoolCore\Finance\Policies\DefaultTuitionPolicy;
use App\Domain\SchoolCore\Finance\Services\ChargeService;
use App\Domain\SchoolCore\Finance\Services\FinanceAuditLogger;
use App\Domain\SchoolCore\Finance\Services\InvoiceService;
use App\Domain\SchoolCore\Finance\Services\PaymentFileService;
use App\Domain\SchoolCore\Finance\Services\PaymentService;
use App\Domain\SchoolCore\Finance\Services\RefundService;
use Illuminate\Support\ServiceProvider;
final class SchoolCoreFinanceServiceProvider extends ServiceProvider
{
public function register(): void
{
$this->app->bind(PaymentServiceContract::class, PaymentService::class);
$this->app->bind(InvoiceServiceContract::class, InvoiceService::class);
$this->app->bind(RefundServiceContract::class, RefundService::class);
$this->app->bind(ChargeServiceContract::class, ChargeService::class);
$this->app->bind(FinanceFileServiceContract::class, PaymentFileService::class);
$this->app->bind(FinanceAuditLoggerContract::class, FinanceAuditLogger::class);
$this->app->bind(PaymentAllocationPolicyContract::class, DefaultPaymentAllocationPolicy::class);
$this->app->bind(TuitionPolicyContract::class, DefaultTuitionPolicy::class);
}
}
@@ -0,0 +1,57 @@
<?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');
}
}
@@ -0,0 +1,68 @@
<?php
declare(strict_types=1);
namespace App\Providers;
use App\Domain\SchoolCore\Academics\Policies\DefaultGradeScalePolicy;
use App\Domain\SchoolCore\Academics\Policies\DefaultPromotionPolicy;
use App\Domain\SchoolCore\Attendance\Policies\StandardSchoolAttendancePolicy;
use App\Domain\SchoolCore\Attendance\Providers\StandardAcademicCalendarProvider;
use App\Domain\SchoolCore\Attendance\Services\AttendanceService;
use App\Domain\SchoolCore\Communication\Policies\DefaultCommunicationPreferencePolicy;
use App\Domain\SchoolCore\Communication\Services\CommunicationService;
use App\Domain\SchoolCore\Communication\Services\RecipientResolver;
use App\Domain\SchoolCore\Contracts\AcademicCalendarProviderContract;
use App\Domain\SchoolCore\Contracts\AttendancePolicyContract;
use App\Domain\SchoolCore\Contracts\AttendanceServiceContract;
use App\Domain\SchoolCore\Contracts\CommunicationPreferencePolicyContract;
use App\Domain\SchoolCore\Contracts\CommunicationServiceContract;
use App\Domain\SchoolCore\Contracts\EnrollmentServiceContract;
use App\Domain\SchoolCore\Contracts\FileAccessPolicyContract;
use App\Domain\SchoolCore\Contracts\FileStorageServiceContract;
use App\Domain\SchoolCore\Contracts\GradeScalePolicyContract;
use App\Domain\SchoolCore\Contracts\GuardianServiceContract;
use App\Domain\SchoolCore\Contracts\InvoiceServiceContract;
use App\Domain\SchoolCore\Contracts\PaymentAllocationPolicyContract;
use App\Domain\SchoolCore\Contracts\PaymentServiceContract;
use App\Domain\SchoolCore\Contracts\PromotionPolicyContract;
use App\Domain\SchoolCore\Contracts\RecipientResolverContract;
use App\Domain\SchoolCore\Contracts\ReportServiceContract;
use App\Domain\SchoolCore\Contracts\StudentIdentifierGeneratorContract;
use App\Domain\SchoolCore\Contracts\StudentServiceContract;
use App\Domain\SchoolCore\Enrollment\Services\EnrollmentService;
use App\Domain\SchoolCore\Files\Policies\PaymentFileAccessPolicy;
use App\Domain\SchoolCore\Files\Services\LaravelLocalFileStorageService;
use App\Domain\SchoolCore\Finance\Policies\DefaultPaymentAllocationPolicy;
use App\Domain\SchoolCore\Finance\Services\InvoiceService;
use App\Domain\SchoolCore\Finance\Services\PaymentService;
use App\Domain\SchoolCore\Guardians\Services\GuardianService;
use App\Domain\SchoolCore\Reporting\Services\ReportService;
use App\Domain\SchoolCore\Students\Services\SequentialStudentIdentifierGenerator;
use App\Domain\SchoolCore\Students\Services\StudentService;
use Illuminate\Support\ServiceProvider;
final class SchoolCoreServiceProvider extends ServiceProvider
{
public function register(): void
{
$this->app->bind(StudentServiceContract::class, StudentService::class);
$this->app->bind(StudentIdentifierGeneratorContract::class, SequentialStudentIdentifierGenerator::class);
$this->app->bind(GuardianServiceContract::class, GuardianService::class);
$this->app->bind(EnrollmentServiceContract::class, EnrollmentService::class);
$this->app->bind(AttendanceServiceContract::class, AttendanceService::class);
$this->app->bind(AttendancePolicyContract::class, StandardSchoolAttendancePolicy::class);
$this->app->bind(AcademicCalendarProviderContract::class, StandardAcademicCalendarProvider::class);
$this->app->bind(GradeScalePolicyContract::class, DefaultGradeScalePolicy::class);
$this->app->bind(PromotionPolicyContract::class, DefaultPromotionPolicy::class);
$this->app->bind(InvoiceServiceContract::class, InvoiceService::class);
$this->app->bind(PaymentServiceContract::class, PaymentService::class);
$this->app->bind(PaymentAllocationPolicyContract::class, DefaultPaymentAllocationPolicy::class);
$this->app->bind(FileAccessPolicyContract::class, PaymentFileAccessPolicy::class);
$this->app->bind(FileStorageServiceContract::class, LaravelLocalFileStorageService::class);
$this->app->bind(CommunicationServiceContract::class, CommunicationService::class);
$this->app->bind(RecipientResolverContract::class, RecipientResolver::class);
$this->app->bind(CommunicationPreferencePolicyContract::class, DefaultCommunicationPreferencePolicy::class);
$this->app->bind(ReportServiceContract::class, ReportService::class);
}
}
@@ -0,0 +1,5 @@
<?php
declare(strict_types=1);
namespace App\Providers;
use App\Domain\SchoolCore\Students\Contracts\AssignmentServiceContract; use App\Domain\SchoolCore\Students\Contracts\EnrollmentServiceContract; use App\Domain\SchoolCore\Students\Contracts\GuardianServiceContract; use App\Domain\SchoolCore\Students\Contracts\HouseholdServiceContract; use App\Domain\SchoolCore\Students\Contracts\PromotionPolicyContract; use App\Domain\SchoolCore\Students\Contracts\PromotionServiceContract; use App\Domain\SchoolCore\Students\Contracts\StudentIdentifierGeneratorContract; use App\Domain\SchoolCore\Students\Contracts\StudentLifecycleAuditLoggerContract; use App\Domain\SchoolCore\Students\Contracts\StudentProfileServiceContract; use App\Domain\SchoolCore\Students\Contracts\StudentReadServiceContract; use App\Domain\SchoolCore\Students\Contracts\StudentServiceContract; use App\Domain\SchoolCore\Students\Policies\DefaultPromotionPolicy; use App\Domain\SchoolCore\Students\Policies\DefaultStudentIdentifierGenerator; use App\Domain\SchoolCore\Students\Services\AssignmentService; use App\Domain\SchoolCore\Students\Services\EnrollmentService; use App\Domain\SchoolCore\Students\Services\GuardianService; use App\Domain\SchoolCore\Students\Services\HouseholdService; use App\Domain\SchoolCore\Students\Services\PromotionService; use App\Domain\SchoolCore\Students\Services\StudentLifecycleAuditLogger; use App\Domain\SchoolCore\Students\Services\StudentProfileService; use App\Domain\SchoolCore\Students\Services\StudentReadService; use App\Domain\SchoolCore\Students\Services\StudentService; use Illuminate\Support\ServiceProvider;
final class SchoolCoreStudentServiceProvider extends ServiceProvider { public function register(): void { $this->app->bind(StudentServiceContract::class,StudentService::class); $this->app->bind(StudentProfileServiceContract::class,StudentProfileService::class); $this->app->bind(StudentIdentifierGeneratorContract::class,DefaultStudentIdentifierGenerator::class); $this->app->bind(GuardianServiceContract::class,GuardianService::class); $this->app->bind(HouseholdServiceContract::class,HouseholdService::class); $this->app->bind(EnrollmentServiceContract::class,EnrollmentService::class); $this->app->bind(AssignmentServiceContract::class,AssignmentService::class); $this->app->bind(PromotionServiceContract::class,PromotionService::class); $this->app->bind(PromotionPolicyContract::class,DefaultPromotionPolicy::class); $this->app->bind(StudentLifecycleAuditLoggerContract::class,StudentLifecycleAuditLogger::class); $this->app->bind(StudentReadServiceContract::class,StudentReadService::class); } }