Files
laravel_school_api_old/app/Providers/SchoolCoreCommunicationServiceProvider.php
T
2026-05-29 04:33:03 -04:00

10 lines
2.6 KiB
PHP

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