Commit 2b05798f authored by Jean-Philippe Metivier's avatar Jean-Philippe Metivier
Browse files

...

parent f76a8436
Loading
Loading
Loading
Loading
Loading
+2 −1
Changes for composer.json: 2 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -9,7 +9,8 @@
    ],
    "require": {
      "laminas/laminas-cli": "*",
        "unicaen/privilege": ">=6.2"
      "unicaen/privilege": ">=6.2",
      "guzzlehttp/guzzle": "^6.3 || ^7.0"
    },
    "autoload": {
        "psr-0": [],
+14 −0
Changes for config/merged/webservice-reader.config.php: 14 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

namespace UnicaenSynchro;

use UnicaenSynchro\Service\WebServiceReader\WebServiceReaderService;
use UnicaenSynchro\Service\WebServiceReader\WebServiceReaderServiceFactory;

return [
    'service_manager' => [
        'factories' => [
            WebServiceReaderService::class => WebServiceReaderServiceFactory::class
        ],
    ],
];
 No newline at end of file
+0 −2
Changes for src/UnicaenSynchro/Service/SqlHelper/SqlHelperService.php: 0 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -65,8 +65,6 @@ class SqlHelperService

    public function fetchValuesSeparator(EntityManager $entityManager, string $table, string $column): array
    {


        $sql    = "select " . $column . " from " . $table . " group by " . $column . ' order by '.$column;
        $values = $this->executeRequeteRef($entityManager, $sql, []);

+37 −4
Changes for src/UnicaenSynchro/Service/Synchronisation/SynchronisationService.php: 37 added lines, 4 removed lines.
Original line number Diff line number Diff line
@@ -4,13 +4,18 @@ namespace UnicaenSynchro\Service\Synchronisation;

use DateTime;
use Exception;
use GuzzleHttp\Exception\GuzzleException;
use RuntimeException;
use UnicaenSynchro\Service\SqlHelper\SqlHelperServiceAwareTrait;
use UnicaenSynchro\Service\WebServiceReader\WebServiceReaderServiceAwareTrait;

class SynchronisationService
{
    use SqlHelperServiceAwareTrait;
    use WebServiceReaderServiceAwareTrait;

    private array $entityManagers = [];
    private array $webServices = [];



@@ -19,7 +24,10 @@ class SynchronisationService
        $this->entityManagers = $entityManagers;
    }


    public function setWebServices(array $webServices): void
    {
        $this->webServices = $webServices;
    }

    private array $configs = [];

@@ -77,18 +85,42 @@ class SynchronisationService
            flush();

            $correspondance    = $this->getFromConfig($name, 'correspondance');
            $orm_source        = $this->entityManagers[$this->getFromConfig($name, 'orm_source')];
            if ($orm_source === null) {
            $orm_source        = null;
            if ($this->getFromConfig($name, 'orm_source') !== null) $orm_source = $this->entityManagers[$this->getFromConfig($name, 'orm_source')];
            $ws_source        =  null;
            if ($this->getFromConfig($name, 'web_service') !== null) $ws_source = $this->webServices[$this->getFromConfig($name, 'web_service')];
            if ($orm_source === null AND $ws_source === null) {
                echo "\033[31m\033[1mPas d'ORM source\033[0m\n";
                echo "La synchronisation [".$name."] n'a pas d'ORM source [".$this->getFromConfig($name, 'orm_source')."]\n";
                echo "La synchronisation [".$name."] n'a pas de WebService source [".$this->getFromConfig($name, 'web_service')."]\n";
                exit(404);
            }

            $orm_destination   = $this->entityManagers[$this->getFromConfig($name, 'orm_destination')];
            if ($orm_destination === null) {
                echo "\033[31m\033[1mPas d'ORM destination\033[0m\n";
                echo "La synchronisation [".$name."] n'a pas d'ORM destination [".$this->getFromConfig($name, 'orm_destination')."]\n";
                exit(404);
            }

            if ($ws_source !== null) {
                $entity = $this->getFromConfig($name, 'entity');
                $table_destination = $this->getFromConfig($name, 'table_destination');
                $id_source = $this->getFromConfig($name, 'id');
                $source = $this->getFromConfig($name, 'source');
                $id_destination = $correspondance[$id_source];

                try {
                    $data_source = $this->getWebServiceReaderService()->fetch($ws_source, $entity);
                } catch (GuzzleException $e) {
                    throw new RuntimeException("Une erreur est survenue lors de la lecteur des données depuis le WebService",$e->getCode(), $e);
                }
                $data_destination = $this->getSqlHelperService()->fetch($orm_destination, $table_destination, $correspondance, 'destination', $id_destination, null, null, $source);
                echo count($data_source) . " entrées dans les données sources.\n";
                $this->doSynchronisation($name, $data_source, $data_destination);
            }

            if ($orm_source) {
                $table_source = $this->getFromConfig($name, 'table_source');
                $table_destination = $this->getFromConfig($name, 'table_destination');
                $id_source = $this->getFromConfig($name, 'id');
@@ -97,7 +129,6 @@ class SynchronisationService
                $separatorSource = $this->getFromConfig($name, 'separator');

                if ($separatorSource != null && $separatorSource != "") {
                //todo
                    $separatorValuesSource = $this->getSqlHelperService()->fetchValuesSeparator($orm_source, $table_source, $separatorSource);
                    $separatorValuesDestination = $this->getSqlHelperService()->fetchValuesSeparator($orm_destination, $table_destination, $correspondance[$separatorSource]);

@@ -128,6 +159,8 @@ class SynchronisationService
                }

                flush();
            }

        } catch (Exception $e) {
            do {
                echo "\033[31m" . $e->getMessage() . "\033[0m\n";
+15 −1
Changes for src/UnicaenSynchro/Service/Synchronisation/SynchronisationServiceFactory.php: 15 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -7,6 +7,7 @@ use Psr\Container\ContainerExceptionInterface;
use Psr\Container\ContainerInterface;
use Psr\Container\NotFoundExceptionInterface;
use UnicaenSynchro\Service\SqlHelper\SqlHelperService;
use UnicaenSynchro\Service\WebServiceReader\WebServiceReaderService;

class SynchronisationServiceFactory {

@@ -25,14 +26,27 @@ class SynchronisationServiceFactory {
            $entityManagers[$id] = $container->get('doctrine.entitymanager.'. $id);
        }

        /** @var SqlHelperService $sqlHelper */
        // récupération des web services déclarés
        $sources = $container->get('Config')['webservices'];
        $webServices = [];
        foreach ($sources as $id => $data) {
            $webServices[$id] = $data;
        }

        /**
         * @var SqlHelperService $sqlHelper
         * @var WebServiceReaderService $webServiceReaderService
         */
        $sqlHelper = $container->get(SqlHelperService::class);
        $webServiceReaderService = $container->get(WebServiceReaderService::class);
        $configs = $container->get('Config')['synchros'];

        $service = new SynchronisationService();
        $service->setSqlHelperService($sqlHelper);
        $service->setWebServiceReaderService($webServiceReaderService);
        $service->setConfigs($configs);
        $service->setEntityManagers($entityManagers);
        $service->setWebServices($webServices);
        return $service;
    }
}
 No newline at end of file
Loading