src/V4/Service/SyncPreConfiguredExportRunner/SyncPreConfiguredExportRunner.php line 57

Open in your IDE?
  1. <?php
  2. namespace App\V4\Service\SyncPreConfiguredExportRunner;
  3. use App\V4\Entity\PreconfiguredExport;
  4. use Doctrine\DBAL\Driver\Exception;
  5. use Doctrine\ORM\EntityManagerInterface;
  6. use Symfony\Component\HttpFoundation\JsonResponse;
  7. use Symfony\Component\HttpFoundation\Response;
  8. class SyncPreConfiguredExportRunner
  9. {
  10.     private const SQL_KEY_DB_CRM '{{ db_crm }}';
  11.     private const SQL_KEY_DB_BUSINESS '{{ db_business }}';
  12.     private const SQL_KEY_DB_PARAM '{{ db_param }}';
  13.     private const SQL_KEY_DB_USER '{{ db_user }}';
  14.     private const SQL_KEY_DB_GED '{{ db_ged }}';
  15.     /**
  16.      * @var EntityManagerInterface
  17.      */
  18.     private $entityManager;
  19.     public function __construct(EntityManagerInterface $entityManager)
  20.     {
  21.         $this->entityManager $entityManager;
  22.     }
  23.     /**
  24.      * @throws Exception
  25.      * @throws \Doctrine\DBAL\Exception
  26.      */
  27.     public function runExport(PreconfiguredExport $data, array $params): JsonResponse
  28.     {
  29.         $sql $data->getContent();
  30.         $dbSqlKeys = [
  31.             self::SQL_KEY_DB_CRM => $_ENV['BDD_API_CRM'],
  32.             self::SQL_KEY_DB_BUSINESS => $_ENV['BDD_API_BUSINESS'],
  33.             self::SQL_KEY_DB_PARAM => $_ENV['BDD_API_PARAM'],
  34.             self::SQL_KEY_DB_USER => $_ENV['BDD_API_USER'],
  35.             self::SQL_KEY_DB_GED => $_ENV['BDD_API_GED'],
  36.         ];
  37.         foreach ($dbSqlKeys as $dbSqlKey => $dbName) {
  38.             $sql str_replace($dbSqlKey$dbName$sql);
  39.         }
  40.         $out = [];
  41.         preg_match_all('/{{ ([^{}]+) }}/'$sql$out);
  42.         foreach ($out[1] as $index => $sqlParam) {
  43.             if (!isset($params[$sqlParam])) {
  44.                 return new JsonResponse(['message' => 'missing_params''param_missing' => $sqlParam], Response::HTTP_BAD_REQUEST);
  45.             }
  46.             $sql str_replace($out[0][$index], ':'.$sqlParam$sql);
  47.         }
  48.         $result $this->entityManager->getConnection()->executeQuery($sql$params);
  49.         return new JsonResponse(['data' => $result->fetchAllAssociative()], Response::HTTP_CREATED);
  50.     }
  51. }