*/ final readonly class TeacherReplacementsCollectionProvider implements ProviderInterface { public function __construct( private GetActiveReplacementsHandler $handler, private TenantContext $tenantContext, private AuthorizationCheckerInterface $authorizationChecker, ) { } /** @return array */ #[Override] public function provide(Operation $operation, array $uriVariables = [], array $context = []): array { if (!$this->authorizationChecker->isGranted(TeacherReplacementVoter::VIEW)) { throw new AccessDeniedHttpException('Vous n\'êtes pas autorisé à voir les remplacements.'); } if (!$this->tenantContext->hasTenant()) { throw new UnauthorizedHttpException('Bearer', 'Tenant non défini.'); } $query = new GetActiveReplacementsQuery( tenantId: (string) $this->tenantContext->getCurrentTenantId(), ); $dtos = ($this->handler)($query); return array_map( static fn (ReplacementDto $dto) => TeacherReplacementResource::fromDto($dto), $dtos, ); } }