RegistrationStatusProvider.php 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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\RegistrationStatus;
  8. use App\Entity\Access\Access;
  9. use App\Enum\OnlineRegistration\RegistrationStatusEnum;
  10. use App\Service\ApiLegacy\ApiLegacyRequestService;
  11. use Symfony\Bundle\SecurityBundle\Security;
  12. use Symfony\Component\HttpFoundation\Response;
  13. class RegistrationStatusProvider implements ProviderInterface
  14. {
  15. public function __construct(
  16. private readonly Security $security,
  17. private readonly ApiLegacyRequestService $apiLegacyRequestService,
  18. ) {
  19. }
  20. /**
  21. * @param mixed[] $uriVariables
  22. * @param mixed[] $context
  23. *
  24. * @throws \JsonException
  25. */
  26. public function provide(Operation $operation, array $uriVariables = [], array $context = []): ?RegistrationStatus
  27. {
  28. if ($operation instanceof GetCollection) {
  29. throw new \RuntimeException('not supported', Response::HTTP_INTERNAL_SERVER_ERROR);
  30. }
  31. /** @var Access $currentAccess */
  32. $currentAccess = $this->security->getUser();
  33. if ($uriVariables['accessId'] !== $currentAccess->getId()) {
  34. throw new \RuntimeException('forbidden', Response::HTTP_SERVICE_UNAVAILABLE);
  35. }
  36. // --- L'appel au service remplacera l'appel à l'API v1 à l'avenir --
  37. // $registrationStatusValue = $this->registrationStatusService->getStatus($currentAccess);
  38. $response = $this->apiLegacyRequestService->getJsonContent(
  39. '/api/online_registration/registration_status',
  40. [],
  41. [],
  42. false
  43. );
  44. $statusMap = [
  45. 'your_application_is_awaiting_processing' => RegistrationStatusEnum::NEGOTIABLE,
  46. 'your_registration_file_has_been_validated' => RegistrationStatusEnum::ACCEPTED,
  47. 'you_have_been_placed_on_the_waiting_list' => RegistrationStatusEnum::PENDING,
  48. 'your_application_has_been_refused' => RegistrationStatusEnum::DENIED,
  49. ];
  50. $status = $response['status'] ? $statusMap[$response['status']] : null;
  51. $registrationStatus = new RegistrationStatus();
  52. $registrationStatus->setAccessId($currentAccess->getId());
  53. $registrationStatus->setStatus($status);
  54. return $registrationStatus;
  55. }
  56. }