diff --git a/run.php b/run.php index 6520f62..fa1df23 100644 --- a/run.php +++ b/run.php @@ -1,6 +1,8 @@ import('var/import/data.csv'); +$importer = new CsvDataImporter($repository, $loader); +$importer->import(); diff --git a/src/CsvDataImporter.php b/src/CsvDataImporter.php index 88c6fa1..aba05dd 100644 --- a/src/CsvDataImporter.php +++ b/src/CsvDataImporter.php @@ -2,54 +2,20 @@ namespace solid; -use PDO; -use PDOException; - class CsvDataImporter { - private PDO $db; - - public function __construct(PDO $db) - { - $this->db = $db; - } - - public function import($file): void - { - $records = $this->loadFile($file); - $this->importData($records); - } + private Repository $repository; + private Loader $loader; - private function loadFile($file): array + public function __construct(Repository $repository, Loader $loader) { - $records = array(); - if (false !== $handle = fopen($file, 'r')) { - while ($record = fgetcsv($handle, 0, ';')) { - $records[] = $record; - } - } - fclose($handle); - - return $records; + $this->repository = $repository; + $this->loader = $loader; } - private function importData(array $records): void + public function import(): void { - try { - $this->db->beginTransaction(); - - $this->db->exec('DELETE FROM imported'); - - foreach ($records as $record) { - $this->db->prepare('INSERT INTO imported VALUES (?, ?, ?)') - ->execute($record); - } - - $this->db->commit(); - - } catch (PDOException $e) { - $this->db->rollback(); - throw $e; - } + $records = $this->loader->loadFile(); + $this->repository->importData($records); } } diff --git a/src/Loader.php b/src/Loader.php new file mode 100644 index 0000000..8410b63 --- /dev/null +++ b/src/Loader.php @@ -0,0 +1,28 @@ +filename = $filename; + } + + public function loadFile(): array + { + $records = array(); + if (false !== $handle = fopen($this->filename, 'r')) { + while ($record = fgetcsv($handle, 0, ';')) { + $records[] = $record; + } + } + fclose($handle); + + return $records; + } +} diff --git a/src/Repository.php b/src/Repository.php index 9049cd0..7c76d73 100644 --- a/src/Repository.php +++ b/src/Repository.php @@ -5,6 +5,7 @@ namespace solid; use PDO; +use PDOException; class Repository { @@ -15,6 +16,25 @@ public function __construct(PDO $db) $this->db = $db; } + public function importData(array $records): void + { + try { + $this->db->beginTransaction(); + + $this->db->exec('DELETE FROM imported'); + + foreach ($records as $record) { + $this->db->prepare('INSERT INTO imported VALUES (?, ?, ?)') + ->execute($record); + } + + $this->db->commit(); + } catch (PDOException $e) { + $this->db->rollback(); + throw $e; + } + } + public function getCount(): int { $data = $this->db->query('SELECT COUNT(*) AS nb FROM imported')->fetch(); diff --git a/tests/CsvDataImporterTest.php b/tests/CsvDataImporterTest.php index 30bda43..56745e5 100644 --- a/tests/CsvDataImporterTest.php +++ b/tests/CsvDataImporterTest.php @@ -6,6 +6,7 @@ use PHPUnit\Framework\TestCase; use solid\CsvDataImporter; +use solid\Loader; use solid\Repository; class CsvDataImporterTest extends TestCase @@ -13,10 +14,12 @@ class CsvDataImporterTest extends TestCase public function testImport(): void { $db = TestsFacility::createDb(); - $importer = new CsvDataImporter($db); - $importer->import('var/import/data.csv'); - $repository = new Repository($db); + $loader = new Loader('var/import/data.csv'); + + $importer = new CsvDataImporter($repository, $loader); + $importer->import(); + $this->assertSame(3, $repository->getCount()); } }