developers-task/src/CsvCalculationService.php

48 lines
1.4 KiB
PHP

<?php
declare(strict_types=1);
namespace App;
use App\Csv\CsvReader;
use App\Csv\CsvWriter;
use App\Logger\LoggerInterface;
use App\Operations\Exceptions\InvalidResultException;
use App\Operations\MathOperationInterface;
class CsvCalculationService
{
public function __construct(
private readonly CsvReader $csvReader,
private readonly CsvWriter $csvWriter,
private readonly MathOperationInterface $operation,
private readonly LoggerInterface $logger
) {
}
public function execute(): void
{
$this->logger->logMessage(sprintf('Start %s operation.%s', $this->operation->getDescription(), PHP_EOL));
foreach ($this->csvReader->readData() as $data) {
try {
$result = $this->operation->calculate($data->number1, $data->number2);
$this->csvWriter->addLine(
[$data->number1, $data->number2, $result]
);
} catch (InvalidResultException $e) {
$this->logger->logMessage(
sprintf(
'Numbers %d and %d are wrong. %s%s',
$data->number1,
$data->number2,
$e->getMessage(),
PHP_EOL
)
);
}
}
$this->logger->logMessage(sprintf('Finished %s operation.%s', $this->operation->getDescription(), PHP_EOL));
}
}