ImportService/src/Service/Import/CsvImportService.php

64 lines
2.2 KiB
PHP

<?php
namespace App\Service\Import;
use App\Service\Import\CsvValidator;
use App\Service\Import\Processor\BasicCsvFileProcessor;
use App\Service\Import\Processor\MainProcessor;
use App\Service\Import\ErrorHandler\LoggingErrorHandler;
use App\Service\Import\Specification\ExactHeaderSpecification;
use App\Service\Import\Specification\RegexColumnSpecification;
use App\Service\Import\Specification\NumericSpecification;
use App\Service\Import\Specification\RequiredColumnSpecification;
use App\Service\Import\Result\ImportResult;
use Psr\Log\LoggerInterface;
class CsvImportService
{
private CsvImporter $importer;
private array $header;
private array $regexListe;
public function __construct()
{}
public function import(string $filePath, array $header, array $regexListe, array $requiredColumns, LoggerInterface $logger): array
{
$this->header = $header;
$this->regexListe = $regexListe;
$headerSpec = new ExactHeaderSpecification($this->header);
$columnSpecs = [];
foreach ($header as $col) {
// Si regex définie → priorité
if (isset($regexListe[$col])) {
$columnSpecs[$col] = new RegexColumnSpecification(
$regexListe[$col],
"Le format de la colonne '$col' est invalide."
);
}
elseif (in_array($col, $requiredColumns)) {
$columnSpecs[$col] = new RequiredColumnSpecification("La colonne '$col' est obligatoire.");
}
}
$fileProcessor = new BasicCsvFileProcessor();
$validator = new CsvValidator($headerSpec, $columnSpecs);
$errorHandler = new LoggingErrorHandler($logger);
$mainProcessor = new MainProcessor();
$this->importer = new CsvImporter($fileProcessor, $validator,$errorHandler,
$mainProcessor,
);
$result = $this->importer->import($filePath);
return [
'success' => $result->isSuccess(),
'errors' => $result->getErrors(),
'processedCount' => $result->getProcessedCount(),
'message' => $result->getMessage(),
];
}
}