diff --git a/src/UnicaenDbImport/CodeGenerator/CodeGenerator.php b/src/UnicaenDbImport/CodeGenerator/CodeGenerator.php index 84ac5ea46e6fe7fd3a6bd96a7c4ded35a724dad9..cbf3177b27669f4958ed14713d79f99879089357 100644 --- a/src/UnicaenDbImport/CodeGenerator/CodeGenerator.php +++ b/src/UnicaenDbImport/CodeGenerator/CodeGenerator.php @@ -10,6 +10,7 @@ use UnicaenDbImport\CodeGenerator\Helper\TableHelper; use UnicaenDbImport\CodeGenerator\Helper\TableValidationHelper; use UnicaenDbImport\Config\ConfigAwareTrait; use UnicaenDbImport\Domain\DestinationInterface; +use UnicaenDbImport\Domain\Operation; use UnicaenDbImport\Domain\ResultInterface; use UnicaenDbImport\Domain\SourceInterface; @@ -254,8 +255,8 @@ abstract class CodeGenerator implements CodeGeneratorInterface /** * @inheritDoc */ - public function generateSQLForDestinationUpdateFromDiffViewRequestResult( - array $rows, + public function generateSQLForDestinationOperation( + $operation, SourceInterface $source, DestinationInterface $destination) { @@ -264,12 +265,40 @@ abstract class CodeGenerator implements CodeGeneratorInterface $sourceCodeColumn = $source->getSourceCodeColumn(); $columns = $source->getColumns(); - return $this->tableHelper->generateSQLForOperationInDestinationTableFromDiffViewRequestResult( - $rows, - $destinationTable, - $sourceCodeColumn, - $columns, - $idColumnSequence); + // colonne ID écartée + $columns = array_diff($columns, ['ID', 'id']); + + switch ($operation) { + case Operation::OPERATION_INSERT; + $sql = $this->tableHelper->generateSQLForInsertOperationInDestinationTable( + $destinationTable, + $sourceCodeColumn, + $columns, + $idColumnSequence); + break; + case Operation::OPERATION_UPDATE; + $sql = $this->tableHelper->generateSQLForUpdateOperationInDestinationTable( + $destinationTable, + $sourceCodeColumn, + $columns); + break; + case Operation::OPERATION_DELETE; + $sql = $this->tableHelper->generateSQLForDeleteOperationInDestinationTable( + $destinationTable, + $sourceCodeColumn, + $columns); + break; + case Operation::OPERATION_UNDELETE; + $sql = $this->tableHelper->generateSQLForUndeleteOperationInDestinationTable( + $destinationTable, + $sourceCodeColumn, + $columns); + break; + default: + throw new RuntimeException("Opération inattendue"); + } + + return $sql . PHP_EOL; } /** diff --git a/src/UnicaenDbImport/CodeGenerator/CodeGeneratorInterface.php b/src/UnicaenDbImport/CodeGenerator/CodeGeneratorInterface.php index 7aea6da9c3fdbe8a02f615f175d5ec353c1de458..733f726e83ba524a0c2045bc6401025ecbfdc9e0 100644 --- a/src/UnicaenDbImport/CodeGenerator/CodeGeneratorInterface.php +++ b/src/UnicaenDbImport/CodeGenerator/CodeGeneratorInterface.php @@ -124,13 +124,13 @@ interface CodeGeneratorInterface public function generateSQLForDiffViewSelect(SourceInterface $source, DestinationInterface $destination); /** - * @param array $rows - * @param SourceInterface $source + * @param string $operation + * @param SourceInterface $source * @param DestinationInterface $destination - * @return string + * @return string[] */ - public function generateSQLForDestinationUpdateFromDiffViewRequestResult( - array $rows, + public function generateSQLForDestinationOperation( + $operation, SourceInterface $source, DestinationInterface $destination); diff --git a/src/UnicaenDbImport/CodeGenerator/Helper/LogTableHelper.php b/src/UnicaenDbImport/CodeGenerator/Helper/LogTableHelper.php index 17269062ec0959f5ea2a5536c0a5b82e7c226ca8..bef564b9c50bb57f2be95ccb1b27dd1f1a0f7fc2 100644 --- a/src/UnicaenDbImport/CodeGenerator/Helper/LogTableHelper.php +++ b/src/UnicaenDbImport/CodeGenerator/Helper/LogTableHelper.php @@ -65,7 +65,7 @@ EOT; throw new RuntimeException("Type de résultat inattendu"); break; } - $success = $result->getException() ? 0 : 1; + $success = $result->getFailure() ? 0 : 1; $startDate = $result->getStartDate()->format("Y-m-d H:i:s"); $endDate = $result->getEndDate()->format("Y-m-d H:i:s"); diff --git a/src/UnicaenDbImport/CodeGenerator/Helper/TableHelper.php b/src/UnicaenDbImport/CodeGenerator/Helper/TableHelper.php index 0f0e9339e45cee482b27c97c9a8479290743d815..8d09604da0c52b49be7c728bd6cb9ad5cbfff9ad 100644 --- a/src/UnicaenDbImport/CodeGenerator/Helper/TableHelper.php +++ b/src/UnicaenDbImport/CodeGenerator/Helper/TableHelper.php @@ -243,7 +243,7 @@ EOT; * @param string $sourceCodeColumn * @param string[] $columns * @param string|null|false $idColumnSequence - * @return string + * @return string[] */ public function generateSQLForOperationInDestinationTableFromDiffViewRequestResult( array $rows, @@ -272,16 +272,29 @@ EOT; foreach ($operations as $operation) { switch ($operation) { case Operation::OPERATION_INSERT: - $sqls[] = $this->generateSQLForInsertOperationInDestinationTable($destinationTable, $sourceCodeColumn, $columns, $idColumnSequence) . ';' . PHP_EOL; + $sqls[] = $this->generateSQLForInsertOperationInDestinationTable( + $destinationTable, + $sourceCodeColumn, + $columns, + $idColumnSequence) . PHP_EOL; break; case Operation::OPERATION_UPDATE: - $sqls[] = $this->generateSQLForUpdateOperationInDestinationTable($destinationTable, $sourceCodeColumn, $columns) . ';' . PHP_EOL; + $sqls[] = $this->generateSQLForUpdateOperationInDestinationTable( + $destinationTable, + $sourceCodeColumn, + $columns) . PHP_EOL; break; case Operation::OPERATION_UNDELETE: - $sqls[] = $this->generateSQLForUndeleteOperationInDestinationTable($destinationTable, $sourceCodeColumn, $columns) . ';' . PHP_EOL; + $sqls[] = $this->generateSQLForUndeleteOperationInDestinationTable( + $destinationTable, + $sourceCodeColumn, + $columns) . PHP_EOL; break; case Operation::OPERATION_DELETE: - $sqls[] = $this->generateSQLForDeleteOperationInDestinationTable($destinationTable, $sourceCodeColumn, $columns) . ';' . PHP_EOL; + $sqls[] = $this->generateSQLForDeleteOperationInDestinationTable( + $destinationTable, + $sourceCodeColumn, + $columns) . PHP_EOL; break; default: throw new RuntimeException("Opération inconnue rencontrée : " . $operation); @@ -289,7 +302,8 @@ EOT; } } - return empty($sqls) ? '' : implode(PHP_EOL, $sqls); +// return empty($sqls) ? '' : implode(PHP_EOL, $sqls); + return $sqls; } /** @@ -363,7 +377,7 @@ EOT; * @param string|null|false $idColumnSequence * @return string */ - protected function generateSQLForInsertOperationInDestinationTable( + public function generateSQLForInsertOperationInDestinationTable( $destinationTable, $sourceCodeColumn, array $columns, @@ -502,7 +516,7 @@ EOT; * @param array $columns * @return string */ - abstract protected function generateSQLForUpdateOperationInDestinationTable($destinationTable, $sourceCodeColumn, array $columns); + abstract public function generateSQLForUpdateOperationInDestinationTable($destinationTable, $sourceCodeColumn, array $columns); /** * @param string $destinationTable @@ -510,7 +524,7 @@ EOT; * @param array $columns * @return string */ - abstract protected function generateSQLForUndeleteOperationInDestinationTable($destinationTable, $sourceCodeColumn, array $columns); + abstract public function generateSQLForUndeleteOperationInDestinationTable($destinationTable, $sourceCodeColumn, array $columns); /** * @param string $destinationTable @@ -518,5 +532,5 @@ EOT; * @param array $columns * @return string */ - abstract protected function generateSQLForDeleteOperationInDestinationTable($destinationTable, $sourceCodeColumn, array $columns); + abstract public function generateSQLForDeleteOperationInDestinationTable($destinationTable, $sourceCodeColumn, array $columns); } \ No newline at end of file diff --git a/src/UnicaenDbImport/CodeGenerator/Oracle/CodeGenerator.php b/src/UnicaenDbImport/CodeGenerator/Oracle/CodeGenerator.php index c41bad6bce9a41553f7625cb0723269b1ff809c2..abdd8a8dbd6cb84e602f3f96728476dd283a034e 100644 --- a/src/UnicaenDbImport/CodeGenerator/Oracle/CodeGenerator.php +++ b/src/UnicaenDbImport/CodeGenerator/Oracle/CodeGenerator.php @@ -3,8 +3,6 @@ namespace UnicaenDbImport\CodeGenerator\Oracle; use UnicaenDbImport\CodeGenerator\Oracle; -use UnicaenDbImport\Domain\DestinationInterface; -use UnicaenDbImport\Domain\SourceInterface; use UnicaenDbImport\Platforms\OraclePlatform; /** @@ -42,27 +40,6 @@ class CodeGenerator extends \UnicaenDbImport\CodeGenerator\CodeGenerator 'END;'; } - /** - * @inheritDoc - */ - public function generateSQLForDestinationUpdateFromDiffViewRequestResult( - array $rows, - SourceInterface $source, - DestinationInterface $destination) - { - $sql = parent::generateSQLForDestinationUpdateFromDiffViewRequestResult($rows, $source, $destination); - - if ($sql === '') { - return ''; - } - - // les ; séparant les INSERT/MERGE perturbent le driver Oracle donc on met ça dans un bloc BEGIN END et miracle... - return - 'BEGIN ' . PHP_EOL . - $sql . PHP_EOL . - 'END;'; - } - /** * @inheritDoc */ diff --git a/src/UnicaenDbImport/CodeGenerator/Oracle/Helper/TableHelper.php b/src/UnicaenDbImport/CodeGenerator/Oracle/Helper/TableHelper.php index 30bfb24df377b79149075cb9322d35842d210c64..dbb8e6a7b13873a60ab4ae326fd49bbdb08befa7 100644 --- a/src/UnicaenDbImport/CodeGenerator/Oracle/Helper/TableHelper.php +++ b/src/UnicaenDbImport/CodeGenerator/Oracle/Helper/TableHelper.php @@ -80,7 +80,7 @@ class TableHelper extends \UnicaenDbImport\CodeGenerator\Helper\TableHelper /** * {@inheritDoc} */ - protected function generateSQLForUpdateOperationInDestinationTable($destinationTable, $sourceCodeColumn, array $columns) + public function generateSQLForUpdateOperationInDestinationTable($destinationTable, $sourceCodeColumn, array $columns) { return $this->generateSQLUpdate(Operation::OPERATION_UPDATE, $destinationTable, $sourceCodeColumn, $columns); } @@ -88,7 +88,7 @@ class TableHelper extends \UnicaenDbImport\CodeGenerator\Helper\TableHelper /** * {@inheritDoc} */ - protected function generateSQLForUndeleteOperationInDestinationTable($destinationTable, $sourceCodeColumn, array $columns) + public function generateSQLForUndeleteOperationInDestinationTable($destinationTable, $sourceCodeColumn, array $columns) { return $this->generateSQLUpdate(Operation::OPERATION_UNDELETE, $destinationTable, $sourceCodeColumn, $columns); } @@ -96,7 +96,7 @@ class TableHelper extends \UnicaenDbImport\CodeGenerator\Helper\TableHelper /** * {@inheritDoc} */ - protected function generateSQLForDeleteOperationInDestinationTable($destinationTable, $sourceCodeColumn, array $columns) + public function generateSQLForDeleteOperationInDestinationTable($destinationTable, $sourceCodeColumn, array $columns) { return $this->generateSQLUpdate(Operation::OPERATION_DELETE, $destinationTable, $sourceCodeColumn, $columns); } diff --git a/src/UnicaenDbImport/Controller/ConsoleController.php b/src/UnicaenDbImport/Controller/ConsoleController.php index 9abb15325089f2f901462aad4481e243780f31c2..325c3b6e8120f71d301344865a4a2bb03eea3905 100644 --- a/src/UnicaenDbImport/Controller/ConsoleController.php +++ b/src/UnicaenDbImport/Controller/ConsoleController.php @@ -61,7 +61,7 @@ class ConsoleController extends AbstractConsoleController $result = $this->importService->runImport($import); - if ($exception = $result->getException()) { + if ($exception = $result->getFailure()) { $this->getConsole()->writeLine("Une erreur a été rencontrée!", ColorInterface::RED); $this->getConsole()->writeLine($exception->getMessage(), ColorInterface::RED); if ($previous = $exception->getPrevious()) { @@ -101,7 +101,7 @@ class ConsoleController extends AbstractConsoleController $result = $this->synchroService->runSynchro($synchro); - if ($exception = $result->getException()) { + if ($exception = $result->getFailure()) { $this->getConsole()->writeLine("Une erreur a été rencontrée!", ColorInterface::RED); $this->getConsole()->writeLine($exception->getMessage(), ColorInterface::RED); if ($previous = $exception->getPrevious()) { diff --git a/src/UnicaenDbImport/Domain/ImportResult.php b/src/UnicaenDbImport/Domain/ImportResult.php index 6c988e2b261c766723eab530a40d0049a86ec08f..66a24a3e2a6e05adba24518f44821fd4bc79c1d5 100644 --- a/src/UnicaenDbImport/Domain/ImportResult.php +++ b/src/UnicaenDbImport/Domain/ImportResult.php @@ -14,11 +14,9 @@ class ImportResult extends Result */ public function setDestinationTablePopulateResult($count) { - $data = [ - 'count' => $count, - 'details' => null, - ]; - $this->setResultsForOperation($data, Operation::OPERATION_INSERT); + $this->setResultsByOperation([ + Operation::OPERATION_INSERT => $count, + ]); } /** diff --git a/src/UnicaenDbImport/Domain/Result.php b/src/UnicaenDbImport/Domain/Result.php index ac4e118287199e364abc23bcac9b7b1c00daed2c..8f651afddf5552dc6ae1bf75801e93550aed154e 100644 --- a/src/UnicaenDbImport/Domain/Result.php +++ b/src/UnicaenDbImport/Domain/Result.php @@ -4,16 +4,17 @@ namespace UnicaenDbImport\Domain; use DateTime; use Exception; +use UnicaenApp\Exception\RuntimeException; abstract class Result implements ResultInterface { /** * @var Exception */ - private $exception; + private $failure; /** - * @var array + * @var array [operation => int|Exception] */ private $resultsByOperation = []; @@ -27,9 +28,21 @@ abstract class Result implements ResultInterface */ private $endDate; + /** + * @param array $results + */ + public function setResultsByOperation(array $results) + { + foreach ($results as $operation => $result) { + /** @var int|Exception $result */ + $this->resultsByOperation[$operation] = $result; + } + } + /** * @param array $data * @param string $operation + * @deprecated Le résultat pour une opération peut être une Exception ! */ public function setResultsForOperation(array $data, $operation) { @@ -39,17 +52,17 @@ abstract class Result implements ResultInterface /** * @return Exception */ - public function getException() + public function getFailure() { - return $this->exception; + return $this->failure; } /** - * @param Exception $exception + * @param Exception $failure */ - public function setException(Exception $exception = null) + public function setFailure(Exception $failure = null) { - $this->exception = $exception; + $this->failure = $failure; } /** @@ -90,7 +103,38 @@ abstract class Result implements ResultInterface */ public function toString($includeDetails = false) { - if ($ex = $this->getException()) { + if (count($this->resultsByOperation) === 0) { + return "Aucune instruction exécutée."; + } + + $str = ''; + foreach ($this->resultsByOperation as $operation => $result) { + $str .= "# " . $operation . " : " . PHP_EOL; + if (is_array($result)) { + $str .= $result['count'] . " instructions exécutées."; + } elseif ($result instanceof Exception){ + $str .= $result->getMessage(); + if ($includeDetails) { + $str .= PHP_EOL . $result->getTraceAsString(); + } + } elseif (is_int($result)) { + $str .= $result . " enregistrement(s)."; + } else { + throw new RuntimeException("Type de résultat spécifié inattendu : " . gettype($result)); + } + $str .= PHP_EOL; + } + + return $str; + } + + /** + * @param bool $includeDetails + * @return string + */ + public function toStringOld($includeDetails = false) + { + if ($ex = $this->getFailure()) { return $ex->getMessage() . PHP_EOL . $ex->getTraceAsString(); } diff --git a/src/UnicaenDbImport/Domain/ResultInterface.php b/src/UnicaenDbImport/Domain/ResultInterface.php index ef564844ffe57b3e1b64e30cb766a7244faedc60..7b17f3354743aa4fc3c911d3f2e0540fe48eaa18 100644 --- a/src/UnicaenDbImport/Domain/ResultInterface.php +++ b/src/UnicaenDbImport/Domain/ResultInterface.php @@ -10,13 +10,13 @@ interface ResultInterface /** * @return Exception */ - public function getException(); + public function getFailure(); /** - * @param Exception $exception + * @param Exception $failure * @return self */ - public function setException(Exception $exception = null); + public function setFailure(Exception $failure = null); /** * @param DateTime $startDate diff --git a/src/UnicaenDbImport/Domain/SynchroResult.php b/src/UnicaenDbImport/Domain/SynchroResult.php index 0deb2499a815355d24e7f99148b4e28f1d7b8ce2..2a556b7df493aed7786df391e3e4b4b1c2574224 100644 --- a/src/UnicaenDbImport/Domain/SynchroResult.php +++ b/src/UnicaenDbImport/Domain/SynchroResult.php @@ -11,6 +11,7 @@ class SynchroResult extends Result /** * @param $rows + * @deprecated Ce n'est pas vraiment le résultat de la synchro ! */ public function setDiffViewRequestResult(array $rows) { diff --git a/src/UnicaenDbImport/Service/DatabaseService.php b/src/UnicaenDbImport/Service/DatabaseService.php index 88641ae7482e75dc27b3e127921ca71ab75ae1d4..3a744c58da49500a4ea8a4460d2027355c69b047 100644 --- a/src/UnicaenDbImport/Service/DatabaseService.php +++ b/src/UnicaenDbImport/Service/DatabaseService.php @@ -10,6 +10,7 @@ use Exception; use UnicaenApp\Exception\RuntimeException; use UnicaenDbImport\CodeGenerator\CodeGenerator; use UnicaenDbImport\Domain\DestinationInterface; +use UnicaenDbImport\Domain\Operation; use UnicaenDbImport\Domain\ResultInterface; use UnicaenDbImport\Domain\SourceInterface; use UnicaenDbImport\Entity\Db\Service\ImportObserv\ImportObservServiceAwareTrait; @@ -232,7 +233,11 @@ class DatabaseService // create table $sql = $this->codeGenerator->generateSQLForImportLogTableCreation($this->destination->getLogTable()); - $this->queryExecutor->exec($sql, $connection); + try { + $this->queryExecutor->exec($sql, $connection); + } catch (DBALException $e) { + throw new RuntimeException("Erreur rencontrée lors de la création de la table de log", null, $e); + } } public function checkIntermediateTableNotExists($intermediateTable) @@ -252,26 +257,38 @@ class DatabaseService { $sql = $this->codeGenerator->generateSQLForIntermediateTableCreation($this->source, $this->destination, $intermediateTable); - $this->queryExecutor->exec($sql, $this->destination->getConnection()); + try { + $this->queryExecutor->exec($sql, $this->destination->getConnection()); + } catch (DBALException $e) { + throw new RuntimeException("Erreur rencontrée lors de la création de la table intermédiaire", null, $e); + } } public function dropIntermediateTable($intermediateTable) { $sql = $this->codeGenerator->generateSQLForIntermmediateTableDrop($intermediateTable); - $this->queryExecutor->exec($sql, $this->destination->getConnection()); + try { + $this->queryExecutor->exec($sql, $this->destination->getConnection()); + } catch (DBALException $e) { + throw new RuntimeException("Erreur rencontrée lors de la suppression de la table intermédiaire", null, $e); + } } public function truncateDestinationTable() { $sql = $this->codeGenerator->generateSQLForClearTable($this->destination->getTable()); - $this->queryExecutor->exec($sql, $this->destination->getConnection()); + try { + $this->queryExecutor->exec($sql, $this->destination->getConnection()); + } catch (DBALException $e) { + $tableName = $this->destination->getTable(); + throw new RuntimeException("Erreur rencontrée lors du vidage de la table destination $tableName", null, $e); + } } /** * @return int - * @throws Exception */ public function populateDestinationTableFromSource() { @@ -308,9 +325,14 @@ class DatabaseService $insertsSQL = $this->codeGenerator->generateSQLForInsertIntoTable($tableName, $rows, $sourceCode, $idColumnSequence); // insert into destination - $this->queryExecutor->exec($insertsSQL, $this->destination->getConnection()); //Exécution de la requêtes (inserts) dans la base destination + try { + //Exécution de la requêtes (inserts) dans la base destination + $count = $this->queryExecutor->exec($insertsSQL, $this->destination->getConnection()); + } catch (DBALException $e) { + throw new RuntimeException("Erreur rencontrée lors de l'écriture dans la table $tableName", null, $e); + } - return count($rows); + return $count; } private function prepareSourceDataForDestination(array $row) @@ -334,7 +356,11 @@ class DatabaseService throw new RuntimeException("Erreur rencontrées lors de la création de la vue diff", null, $e); } - $this->queryExecutor->exec($sql, $this->destination->getConnection()); + try { + $this->queryExecutor->exec($sql, $this->destination->getConnection()); + } catch (DBALException $e) { + throw new RuntimeException("Erreur rencontrée lors de la création de la vue différentielle", null, $e); + } } /** @@ -355,7 +381,11 @@ class DatabaseService if (!empty($importObservRows)) { $sql = $this->codeGenerator->generateSQLForInsertionIntoImportObservResult($importObservRows); - $this->queryExecutor->exec($sql, $this->destination->getConnection()); + try { + $this->queryExecutor->exec($sql, $this->destination->getConnection()); + } catch (DBALException $e) { + throw new RuntimeException("Erreur rencontrée lors de l'écriture dans la table IMPORT_OBSERV_RESULT", null, $e); + } } } @@ -382,6 +412,57 @@ class DatabaseService } } + /** + * @return array [operation => int|Exception] + */ + public function updateDestination() + { + $results = []; + + $sql = $this->codeGenerator->generateSQLForDestinationOperation( + Operation::OPERATION_INSERT, + $this->source, + $this->destination + ); + $results[Operation::OPERATION_INSERT] = $this->executeSql($sql); + + $sql = $this->codeGenerator->generateSQLForDestinationOperation( + Operation::OPERATION_UPDATE, + $this->source, + $this->destination + ); + $results[Operation::OPERATION_UPDATE] = $this->executeSql($sql); + + $sql = $this->codeGenerator->generateSQLForDestinationOperation( + Operation::OPERATION_DELETE, + $this->source, + $this->destination + ); + $results[Operation::OPERATION_DELETE] = $this->executeSql($sql); + + $sql = $this->codeGenerator->generateSQLForDestinationOperation( + Operation::OPERATION_UNDELETE, + $this->source, + $this->destination + ); + $results[Operation::OPERATION_UNDELETE] = $this->executeSql($sql); + + return $results; + } + + /** + * @param string $sql + * @return DBALException|int + */ + private function executeSql($sql) + { + try { + return $this->queryExecutor->exec($sql, $this->destination->getConnection()); + } catch (DBALException $e) { + return $e; + } + } + /** * Requête la Source pour obtenir les données sources. * @@ -415,6 +496,10 @@ class DatabaseService $sql = $this->codeGenerator->generateSQLForInsertResultIntoLogTable($result, $importLogTable); - $this->queryExecutor->exec($sql, $this->destination->getConnection()); + try { + $this->queryExecutor->exec($sql, $this->destination->getConnection()); + } catch (DBALException $e) { + throw new RuntimeException("Erreur rencontrée lors de l'écriture des logs dans la table $importLogTable", null, $e); + } } } \ No newline at end of file diff --git a/src/UnicaenDbImport/Service/FacadeService.php b/src/UnicaenDbImport/Service/FacadeService.php index e9b8641e68bd5906a7e956a1340341d4ff4ad2aa..90c96551b8f57b51db23de5b1a83eb82f8632bae 100644 --- a/src/UnicaenDbImport/Service/FacadeService.php +++ b/src/UnicaenDbImport/Service/FacadeService.php @@ -3,14 +3,15 @@ namespace UnicaenDbImport\Service; use Doctrine\DBAL\Connection as DbConnection; -use Exception; use stdClass; use UnicaenApp\Exception\RuntimeException; use UnicaenDbImport\Connection\ApiConnection; use UnicaenDbImport\Domain\DestinationInterface; use UnicaenDbImport\Domain\Exception\ConnectionException; +use UnicaenDbImport\Domain\ImportResult; use UnicaenDbImport\Domain\ResultInterface; use UnicaenDbImport\Domain\SourceInterface; +use UnicaenDbImport\Domain\SynchroResult; use Zend\Log\Logger; use Zend\Log\LoggerInterface; use Zend\Log\Writer\Stream; @@ -148,8 +149,7 @@ class FacadeService } /** - * @return int - * @throws Exception + * @return ImportResult */ public function importToDestination() { @@ -157,8 +157,12 @@ class FacadeService switch (true) { case $connection instanceof DbConnection: - return $this->databaseService->populateDestinationTableFromSource(); - break; + $count = $this->databaseService->populateDestinationTableFromSource(); + + $result = new ImportResult(); + $result->setDestinationTablePopulateResult($count); + + return $result; default: throw ConnectionException::unexpected($connection); break; @@ -166,7 +170,7 @@ class FacadeService } /** - * @return array + * @return SynchroResult */ public function synchronizeDestination() { @@ -187,14 +191,16 @@ class FacadeService if ($this->useImportObserv) { $this->databaseService->populateImportObservResultTable(); } - $diffViewRequestResult = $this->databaseService->executeDiffViewSelectRequest(); - $this->databaseService->updateDestinationFromDiffViewSelectRequestResult($diffViewRequestResult); + $resultsByOperation = $this->databaseService->updateDestination(); if ($this->requiresIntermediateTable()) { $this->databaseService->dropIntermediateTable($intermediateTable); } - return $diffViewRequestResult; + $result = new SynchroResult(); + $result->setResultsByOperation($resultsByOperation); + + return $result; } /** diff --git a/src/UnicaenDbImport/Service/ImportService.php b/src/UnicaenDbImport/Service/ImportService.php index bd7e1117856965a7754b688378e8888394b5b607..3504b59ce3c33a68b337fcd894e4c0058e0372a8 100644 --- a/src/UnicaenDbImport/Service/ImportService.php +++ b/src/UnicaenDbImport/Service/ImportService.php @@ -2,7 +2,6 @@ namespace UnicaenDbImport\Service; -use Doctrine\DBAL\ConnectionException; use Exception; use UnicaenApp\Exception\RuntimeException; use UnicaenDbImport\Config\Config; @@ -93,9 +92,6 @@ class ImportService $destination = $import->getDestination(); $connection = $destination->getConnection(); - $result = new ImportResult(); - $result->setImport($import); - $startDate = date_create('now'); $this->facadeService->setSource($source); @@ -108,19 +104,19 @@ class ImportService $connection->beginTransaction(); $this->facadeService->clearDestination(); - $count = $this->facadeService->importToDestination(); + $result = $this->facadeService->importToDestination(); try { $connection->commit(); } catch (Exception $e) { $connection->rollBack(); - throw new RuntimeException("Erreur rencontrée en base de données", null, $e); + throw new RuntimeException("Erreur rencontrée lors du commit en base de données", null, $e); } - $result->setDestinationTablePopulateResult($count); - } catch (Exception $e) { - $result->setException($e); + $result = new ImportResult(); + $result->setFailure($e); } + $result->setImport($import); $result->setStartDate($startDate); $result->setEndDate(); diff --git a/src/UnicaenDbImport/Service/SynchroService.php b/src/UnicaenDbImport/Service/SynchroService.php index 69e5c0401563812b2fcaf86e6a0feeb5c5df40d7..1ee365ce3d125044eed1db7b8f55d980e7b5a9f4 100644 --- a/src/UnicaenDbImport/Service/SynchroService.php +++ b/src/UnicaenDbImport/Service/SynchroService.php @@ -92,9 +92,6 @@ class SynchroService $destination = $synchro->getDestination(); $connection = $destination->getConnection(); - $result = new SynchroResult(); - $result->setSynchro($synchro); - $this->facadeService->setSource($source); $this->facadeService->setDestination($destination); @@ -102,6 +99,7 @@ class SynchroService $startDate = date_create('now'); + $exception = null; try { $this->facadeService->createImportLog(); $this->facadeService->validateDestination(); @@ -110,19 +108,18 @@ class SynchroService $connection->beginTransaction(); try { - $diffViewRequestResult = $this->facadeService->synchronizeDestination(); + $result = $this->facadeService->synchronizeDestination(); $connection->commit(); } catch (Exception $e) { $connection->rollBack(); throw new RuntimeException("Erreur rencontrée. Rollback effectué.", null, $e); } - - $result->setDiffViewRequestResult($diffViewRequestResult); - } catch (Exception $e) { - $result->setException($e); + $result = new SynchroResult(); + $result->setFailure($e); } + $result->setSynchro($synchro); $result->setStartDate($startDate); $result->setEndDate();