<?php
namespace App\V4\Service\SyncPreConfiguredExportRunner;
use App\V4\Entity\PreconfiguredExport;
use Doctrine\DBAL\Driver\Exception;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
class SyncPreConfiguredExportRunner
{
private const SQL_KEY_DB_CRM = '{{ db_crm }}';
private const SQL_KEY_DB_BUSINESS = '{{ db_business }}';
private const SQL_KEY_DB_PARAM = '{{ db_param }}';
private const SQL_KEY_DB_USER = '{{ db_user }}';
private const SQL_KEY_DB_GED = '{{ db_ged }}';
/**
* @var EntityManagerInterface
*/
private $entityManager;
public function __construct(EntityManagerInterface $entityManager)
{
$this->entityManager = $entityManager;
}
/**
* @throws Exception
* @throws \Doctrine\DBAL\Exception
*/
public function runExport(PreconfiguredExport $data, array $params): JsonResponse
{
$sql = $data->getContent();
$dbSqlKeys = [
self::SQL_KEY_DB_CRM => $_ENV['BDD_API_CRM'],
self::SQL_KEY_DB_BUSINESS => $_ENV['BDD_API_BUSINESS'],
self::SQL_KEY_DB_PARAM => $_ENV['BDD_API_PARAM'],
self::SQL_KEY_DB_USER => $_ENV['BDD_API_USER'],
self::SQL_KEY_DB_GED => $_ENV['BDD_API_GED'],
];
foreach ($dbSqlKeys as $dbSqlKey => $dbName) {
$sql = str_replace($dbSqlKey, $dbName, $sql);
}
$out = [];
preg_match_all('/{{ ([^{}]+) }}/', $sql, $out);
foreach ($out[1] as $index => $sqlParam) {
if (!isset($params[$sqlParam])) {
return new JsonResponse(['message' => 'missing_params', 'param_missing' => $sqlParam], Response::HTTP_BAD_REQUEST);
}
$sql = str_replace($out[0][$index], ':'.$sqlParam, $sql);
}
$result = $this->entityManager->getConnection()->executeQuery($sql, $params);
return new JsonResponse(['data' => $result->fetchAllAssociative()], Response::HTTP_CREATED);
}
}