RegistrationStatusProvider.php 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. <?php
  2. namespace App\State\Provider\OnlineRegistration;
  3. use ApiPlatform\Metadata\GetCollection;
  4. use ApiPlatform\Metadata\Operation;
  5. use ApiPlatform\State\ProviderInterface;
  6. use App\ApiResources\OnlineRegistration\RegistrationStatus;
  7. use App\Entity\Access\Access;
  8. use App\Enum\OnlineRegistration\RegistrationStatusEnum;
  9. use App\Service\ApiLegacy\ApiLegacyRequestService;
  10. use Symfony\Bundle\SecurityBundle\Security;
  11. class RegistrationStatusProvider 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. * @throws \JsonException
  23. */
  24. public function provide(Operation $operation, array $uriVariables = [], array $context = []): ?RegistrationStatus
  25. {
  26. if ($operation instanceof GetCollection) {
  27. throw new \RuntimeException('not supported', 500);
  28. }
  29. /** @var Access $currentAccess */
  30. $currentAccess = $this->security->getUser();
  31. if ($uriVariables['accessId'] !== $currentAccess->getId()) {
  32. throw new \RuntimeException('forbidden', 503);
  33. }
  34. // --- L'appel au service remplacera l'appel à l'API v1 à l'avenir --
  35. // $registrationStatusValue = $this->registrationStatusService->getStatus($currentAccess);
  36. $response = $this->apiLegacyRequestService->getJsonContent(
  37. '/api/online_registration/registration_status',
  38. [],
  39. [],
  40. false
  41. );
  42. $statusMap = [
  43. 'your_application_is_awaiting_processing' => RegistrationStatusEnum::NEGOTIABLE,
  44. 'your_registration_file_has_been_validated' => RegistrationStatusEnum::ACCEPTED,
  45. 'you_have_been_placed_on_the_waiting_list' => RegistrationStatusEnum::PENDING,
  46. 'your_application_has_been_refused' => RegistrationStatusEnum::DENIED,
  47. null => null,
  48. ];
  49. $status = isset($response['status']) ? $statusMap[$response['status']] : null;
  50. $registrationStatus = new RegistrationStatus();
  51. $registrationStatus->setAccessId($currentAccess->getId());
  52. $registrationStatus->setStatus($status);
  53. return $registrationStatus;
  54. }
  55. }