RegistrationAvailabilityProvider.php 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\State\Provider\OnlineRegistration;
  4. use ApiPlatform\Metadata\GetCollection;
  5. use ApiPlatform\Metadata\Operation;
  6. use ApiPlatform\State\ProviderInterface;
  7. use App\ApiResources\OnlineRegistration\RegistrationAvailability;
  8. use App\Entity\Access\Access;
  9. use App\Service\ApiLegacy\ApiLegacyRequestService;
  10. use Symfony\Bundle\SecurityBundle\Security;
  11. class RegistrationAvailabilityProvider implements ProviderInterface
  12. {
  13. public function __construct(
  14. private readonly Security $security,
  15. private readonly ApiLegacyRequestService $apiLegacyRequestService,
  16. ) {
  17. }
  18. /**
  19. * @param mixed[] $uriVariables
  20. * @param mixed[] $context
  21. */
  22. public function provide(Operation $operation, array $uriVariables = [], array $context = []): ?RegistrationAvailability
  23. {
  24. if ($operation instanceof GetCollection) {
  25. throw new \RuntimeException('not supported', 500);
  26. }
  27. /** @var Access $currentAccess */
  28. $currentAccess = $this->security->getUser();
  29. if ($uriVariables['accessId'] !== $currentAccess->getId()) {
  30. throw new \RuntimeException('forbidden', 503);
  31. }
  32. $response = $this->apiLegacyRequestService->get('/api/online_registration/access_verification');
  33. $content = json_decode($response->getContent(false), true, 512, JSON_THROW_ON_ERROR);
  34. $availability = new RegistrationAvailability();
  35. $availability->setAccessId($currentAccess->getId());
  36. $availability->setAvailable($response->getStatusCode() === 200);
  37. $availability->setMessage($content['message']);
  38. return $availability;
  39. }
  40. }