Commit d0f7e360 authored by Florentin L'Homme's avatar Florentin L'Homme
Browse files

Refonte du fonctionnement d'UnicaenDbImport (distinction des mécanismes import/synchro)

parent acbc6c84
Loading
Loading
Loading
Loading
+15 −2
Original line number Diff line number Diff line
@@ -10,6 +10,8 @@ use UnicaenDbImport\Importer\PostgreSQL\PostgreSQLImporter;
use UnicaenDbImport\Importer\PostgreSQL\PostgreSQLImporterFactory;
use UnicaenDbImport\Service\ImportService;
use UnicaenDbImport\Service\ImportServiceFactory;
use UnicaenDbImport\Service\SynchroService;
use UnicaenDbImport\Service\SynchroServiceFactory;

return [
    'import' => [
@@ -29,10 +31,20 @@ return [
                        'route'    => 'run import [--all|-a] [--name=]',
                        'defaults' => [
                            'controller' => 'UnicaenDbImport\Controller\Console',
                            'action'     => 'runImport',
                            'action'     => 'runImportOnly',
                        ],
                    ],
                ],
                'execute_synchro' => [
                    'type'    => 'simple',
                    'options' => [
                        'route'    => 'run synchro [--all|-a] [--name=]',
                        'defaults' => [
                            'controller' => 'UnicaenDbImport\Controller\Console',
                            'action'     => 'runSynchroOnly',
                        ],
                    ],
                ],
                ]
            ]
        ]
    ],
@@ -47,6 +59,7 @@ return [
        'factories' => [
            ImportConfig::class => ImportConfigFactory::class,
            ImportService::class => ImportServiceFactory::class,
            SynchroService::class => SynchroServiceFactory::class,

            PostgreSQLImporter::class => PostgreSQLImporterFactory::class,
        ],
+10 −3
Original line number Diff line number Diff line
@@ -162,7 +162,7 @@ EOT;
        return $sql;
    }

    public function generateSQLForInsertIntoIntermmediateTable($intermediateTable, array $columnsValues)
    public function generateSQLForInsertIntoDestinationTable($tableName, array $columnsValues)
    {
        $platform = $this->platform;

@@ -175,13 +175,20 @@ EOT;
        }, $columnsValues));

        $sqlTemplate = <<<'EOT'
insert into {intermediateTable} ({commaSeparatedColumnNames}) values ({commaSeparatedColumnValues});
insert into {tableName} ({commaSeparatedColumnNames}) values ({commaSeparatedColumnValues});
EOT;
        $sql = Util::tokenReplacedString($sqlTemplate, compact('intermediateTable', 'commaSeparatedColumnNames', 'commaSeparatedColumnValues'));
        $sql = Util::tokenReplacedString($sqlTemplate, compact('tableName', 'commaSeparatedColumnNames', 'commaSeparatedColumnValues'));

        return $sql;
    }

    public function generateSQLForTruncateTable($tableName)
    {
        $platform = $this->platform;

        return $platform->getTruncateTableSQL($tableName);
    }

    /**
     * @return string
     */
+1 −1
Original line number Diff line number Diff line
@@ -74,7 +74,7 @@ interface CodeGeneratorInterface
     * @param array  $columnsValues
     * @return string
     */
    public function generateSQLForInsertIntoIntermmediateTable($intermediateTable, array $columnsValues);
    public function generateSQLForInsertIntoDestinationTable($intermediateTable, array $columnsValues);

    /**
     * @return string
+52 −6
Original line number Diff line number Diff line
@@ -4,10 +4,16 @@ namespace UnicaenDbImport\Config;

use Doctrine\DBAL\Platforms\AbstractPlatform;
use UnicaenApp\Exception\RuntimeException;
use UnicaenDbImport\Domain\Import;
use UnicaenDbImport\Domain\ImportInterface;
use UnicaenDbImport\Domain\Exception\ImportNotFoundException;
use UnicaenDbImport\Importer\ImporterInterface;

/**
 * Contient les configurations spécifiées dans un unicaen-db-import.global.php
 * Permet la récupération des Importers (~> Interfaces (et méthodes correspondantes) associés à PostgreSQLImporter ou OracleXXX ou ...)
 * @package UnicaenDbImport\Config
 */
class ImportConfig
{
    /**
@@ -21,10 +27,15 @@ class ImportConfig
    protected $imports = [];

    /**
     * @param \UnicaenDbImport\Domain\Import[] $imports
     * @var ImportInterface[]
     */
    protected $synchros = [];

    /**
     * @param Import[] $imports
     * @return static
     */
    public function setImports(array $imports)
    public function setImports(array $imports): self
    {
        $this->imports = $imports;

@@ -34,7 +45,7 @@ class ImportConfig
    /**
     * @return ImportInterface[]
     */
    public function getImports()
    public function getImports(): array
    {
        return $this->imports;
    }
@@ -43,7 +54,7 @@ class ImportConfig
     * @param string $name
     * @return ImportInterface
     */
    public function getImport($name)
    public function getImport($name): ImportInterface
    {
        foreach ($this->imports as $import) {
            if ($import->getName() === $name) {
@@ -51,7 +62,41 @@ class ImportConfig
            }
        }

        throw ImportNotFoundException::byName($name);
        return null;
    }

    /**
     * @param ImportInterface[] $synchros
     * @return static
     */
    public function setSynchros(array $synchros): self
    {
        $this->synchros = $synchros;

        return $this;
    }

    /**
     * @return ImportInterface[]
     */
    public function getSynchros(): array
    {
        return $this->synchros;
    }

    /**
     * @param string $name
     * @return ImportInterface
     */
    public function getSynchro($name): ImportInterface
    {
        foreach ($this->synchros as $synchro) {
            if ($synchro->getName() === $name) {
                return $synchro;
            }
        }

        return null;
    }

    /**
@@ -81,8 +126,9 @@ class ImportConfig
    }

    /**
     * @param \UnicaenDbImport\Domain\ImportInterface $import
     * @param ImportInterface $import
     * @return ImporterInterface
     * @throws \Doctrine\DBAL\DBALException
     */
    public function getImporterForImport(ImportInterface $import)
    {
+21 −4
Original line number Diff line number Diff line
@@ -6,9 +6,7 @@ use Doctrine\DBAL\Connection;
use UnicaenDbImport\Domain\Destination;
use UnicaenDbImport\Domain\Import;
use UnicaenDbImport\Domain\Source;
use UnicaenDbImport\Config\ConfigException;
use UnicaenDbImport\Importer\ImporterException;
use UnicaenDbImport\Domain\Exception\ImportNotFoundException;
use Zend\ServiceManager\ServiceLocatorInterface;

class ImportConfigFactory
@@ -34,10 +32,12 @@ class ImportConfigFactory

        $importers  = $this->createImporters($config);
        $imports    = $this->createImports($config);
        $synchros   = $this->createSynchros($config);

        $importConfig = new ImportConfig();
        $importConfig->setImporters($importers);
        $importConfig->setImports($imports);
        $importConfig->setSynchros($synchros);

        return $importConfig;
    }
@@ -105,6 +105,23 @@ class ImportConfigFactory
        return Import::fromConfig($importConfig);
    }

    private function createSynchros($config)
    {
        $synchros = [];
        if (array_key_exists($key = 'synchros', $config)) {
            foreach ($config[$key] as $synchroArr) {
                $synchros[] = $this->createSynchro($synchroArr);
            }
        }

        return $synchros;
    }

    private function createSynchro($synchroConfig)
    {
        return $this->createImport($synchroConfig); //Même configuration interne (une source, une destination, ...)
    }

    private function createSource(array $config)
    {
        /** @var Connection $conn */
Loading