86 lines
2.6 KiB
PHP
86 lines
2.6 KiB
PHP
<?php
|
|
|
|
namespace App\Infrastructure\PostgreSQL\Repository\CarRevisionRepository;
|
|
|
|
use App\Domain\Model\CarRevision;
|
|
use App\Domain\Model\CarRevisionCollection;
|
|
use App\Domain\Model\Value\CarRevisionId;
|
|
use App\Domain\Model\Value\CarModelId;
|
|
use App\Domain\Repository\CarRevisionRepository;
|
|
use Doctrine\DBAL\Connection;
|
|
|
|
final class PostgreSQLCarRevisionRepository implements CarRevisionRepository
|
|
{
|
|
public function __construct(
|
|
private readonly Connection $connection,
|
|
) {}
|
|
|
|
public function findAll(): CarRevisionCollection
|
|
{
|
|
$sql = 'SELECT * FROM car_revisions ORDER BY name ASC';
|
|
|
|
$result = $this->connection->executeQuery($sql);
|
|
$carRevisions = [];
|
|
$mapper = new ModelMapper();
|
|
|
|
foreach ($result->fetchAllAssociative() as $row) {
|
|
$carRevisions[] = $mapper->map($row);
|
|
}
|
|
|
|
return new CarRevisionCollection($carRevisions);
|
|
}
|
|
|
|
public function findById(CarRevisionId $carRevisionId): ?CarRevision
|
|
{
|
|
$sql = 'SELECT * FROM car_revisions WHERE id = ?';
|
|
|
|
$result = $this->connection->executeQuery($sql, [$carRevisionId->value]);
|
|
$row = $result->fetchAssociative();
|
|
|
|
if ($row === false) {
|
|
return null;
|
|
}
|
|
|
|
$mapper = new ModelMapper();
|
|
return $mapper->map($row);
|
|
}
|
|
|
|
public function findByCarModelId(CarModelId $carModelId): CarRevisionCollection
|
|
{
|
|
$sql = 'SELECT * FROM car_revisions WHERE car_model_id = ? ORDER BY name ASC';
|
|
|
|
$result = $this->connection->executeQuery($sql, [$carModelId->value]);
|
|
$carRevisions = [];
|
|
$mapper = new ModelMapper();
|
|
|
|
foreach ($result->fetchAllAssociative() as $row) {
|
|
$carRevisions[] = $mapper->map($row);
|
|
}
|
|
|
|
return new CarRevisionCollection($carRevisions);
|
|
}
|
|
|
|
public function save(CarRevision $carRevision): void
|
|
{
|
|
$sql = 'INSERT INTO car_revisions (id, car_model_id, name) VALUES (?, ?, ?) ON CONFLICT (id) DO UPDATE SET car_model_id = EXCLUDED.car_model_id, name = EXCLUDED.name';
|
|
|
|
$this->connection->executeStatement($sql, [
|
|
$carRevision->carRevisionId->value,
|
|
$carRevision->carModelId->value,
|
|
$carRevision->name
|
|
]);
|
|
|
|
return;
|
|
}
|
|
|
|
public function delete(CarRevision $carRevision): void
|
|
{
|
|
$sql = 'DELETE FROM car_revisions WHERE id = ?';
|
|
$this->connection->executeStatement($sql, [$carRevision->carRevisionId->value]);
|
|
}
|
|
|
|
public function deleteAll(): void
|
|
{
|
|
$this->connection->executeStatement('DELETE FROM car_revisions');
|
|
}
|
|
} |