Skip to content
This repository was archived by the owner on Aug 2, 2025. It is now read-only.

Commit cda44d9

Browse files
committed
Move PDO repositories into dedicated namespace
1 parent 84db344 commit cda44d9

File tree

8 files changed

+156
-106
lines changed

8 files changed

+156
-106
lines changed

src/Command/SynchronizeCommand.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77
use App\{
88
Clock,
99
PhpVersionFetcher,
10-
Repository\LastUpdateRepository,
11-
Repository\PhpReleaseRepository,
12-
Repository\PhpVersionRepository,
10+
Repository\PDO\LastUpdateRepository,
11+
Repository\PDO\PdoPhpReleaseRepository,
12+
Repository\PDO\PdoPhpVersionRepository,
1313
};
1414
use Symfony\Component\Console\{
1515
Command\Command,
@@ -22,8 +22,8 @@ final class SynchronizeCommand extends Command
2222
public function __construct(
2323
private Clock $clock,
2424
private LastUpdateRepository $lastUpdateRepository,
25-
private PhpReleaseRepository $releaseRepository,
26-
private PhpVersionRepository $versionRepository,
25+
private PdoPhpReleaseRepository $releaseRepository,
26+
private PdoPhpVersionRepository $versionRepository,
2727
private PhpVersionFetcher $fetcher,
2828
) {
2929
parent::__construct('synchronize');

src/Controller/DefaultController.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
namespace App\Controller;
66

7-
use App\Repository\LastUpdateRepository;
7+
use App\Repository\PDO\LastUpdateRepository;
88
use RuntimeException;
99
use Symfony\Component\HttpFoundation\Response;
1010

src/Controller/VersionsController.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
namespace App\Controller;
66

77
use App\Repository\{
8-
PhpReleaseRepository,
9-
PhpVersionRepository,
8+
PDO\PdoPhpReleaseRepository,
9+
PDO\PdoPhpVersionRepository,
1010
};
1111
use Symfony\Component\HttpFoundation\{
1212
JsonResponse,
@@ -23,28 +23,28 @@ public function __construct(
2323
) {
2424
}
2525

26-
public function all(PhpVersionRepository $repository): Response
26+
public function all(PdoPhpVersionRepository $repository): Response
2727
{
2828
$versions = $repository->all();
2929

3030
return $this->createResponse($versions);
3131
}
3232

33-
public function current(PhpVersionRepository $repository): Response
33+
public function current(PdoPhpVersionRepository $repository): Response
3434
{
3535
$versions = $repository->maintenedVersions();
3636

3737
return $this->createResponse($versions);
3838
}
3939

40-
public function eol(PhpVersionRepository $repository): Response
40+
public function eol(PdoPhpVersionRepository $repository): Response
4141
{
4242
$versions = $repository->unmaintenedVersions();
4343

4444
return $this->createResponse($versions);
4545
}
4646

47-
public function releases(PhpReleaseRepository $repository): Response
47+
public function releases(PdoPhpReleaseRepository $repository): Response
4848
{
4949
$releases = $repository->all();
5050

src/Repository/LastUpdateRepository.php renamed to src/Repository/PDO/LastUpdateRepository.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
declare(strict_types=1);
44

5-
namespace App\Repository;
5+
namespace App\Repository\PDO;
66

77
use App\Clock;
88
use DateTimeImmutable;
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Repository\PDO;
6+
7+
use App\{
8+
Model\PhpRelease,
9+
Repository\PhpReleaseRepository,
10+
};
11+
use PDO;
12+
use PDOException;
13+
14+
final class PdoPhpReleaseRepository implements PhpReleaseRepository
15+
{
16+
public function __construct(
17+
private PDO $db,
18+
) {
19+
}
20+
21+
/**
22+
* @return PhpRelease[]
23+
*/
24+
public function all(): iterable
25+
{
26+
$stmt = $this->db->query('SELECT * FROM php_release ORDER BY release_date DESC');
27+
while ($row = $stmt->fetch()) {
28+
yield PhpRelease::fromArray($row);
29+
}
30+
}
31+
32+
public function save(PhpRelease ...$releases): void
33+
{
34+
$this->db->beginTransaction();
35+
36+
try {
37+
foreach ($releases as $release) {
38+
$stmt = $this->db->prepare('INSERT OR REPLACE INTO php_release(version, release_date) VALUES (:version, :date)');
39+
$stmt->bindValue('version', $release->getVersion());
40+
$stmt->bindValue('date', $release->getReleaseDate()->format('Y-m-d'));
41+
$stmt->execute();
42+
}
43+
44+
$this->db->commit();
45+
} catch (PDOException $e) {
46+
$this->db->rollBack();
47+
}
48+
}
49+
}
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Repository\PDO;
6+
7+
use App\{
8+
Model\PhpVersion,
9+
Repository\PhpVersionRepository,
10+
};
11+
use DateTimeImmutable;
12+
use PDO;
13+
use PDOException;
14+
15+
final class PdoPhpVersionRepository implements PhpVersionRepository
16+
{
17+
public function __construct(
18+
private PDO $db,
19+
) {
20+
}
21+
22+
/**
23+
* @return PhpVersion[]
24+
*/
25+
public function all(): iterable
26+
{
27+
$stmt = $this->db->query('SELECT * FROM php_version ORDER BY end_of_life_date DESC');
28+
while ($row = $stmt->fetch()) {
29+
yield $this->createObjectInstance($row);
30+
}
31+
}
32+
33+
/**
34+
* @return PhpVersion[]
35+
*/
36+
public function maintenedVersions(): iterable
37+
{
38+
$stmt = $this->db->query('SELECT * FROM php_version WHERE end_of_life_date > DATE("now") ORDER BY end_of_life_date DESC');
39+
while ($row = $stmt->fetch()) {
40+
yield $this->createObjectInstance($row);
41+
}
42+
}
43+
44+
/**
45+
* @return PhpVersion[]
46+
*/
47+
public function unmaintenedVersions(): iterable
48+
{
49+
$stmt = $this->db->query('SELECT * FROM php_version WHERE end_of_life_date <= DATE("now") ORDER BY end_of_life_date DESC');
50+
while ($row = $stmt->fetch()) {
51+
yield $this->createObjectInstance($row);
52+
}
53+
}
54+
55+
public function save(PhpVersion ...$versions): void
56+
{
57+
$this->db->beginTransaction();
58+
59+
try {
60+
foreach ($versions as $phpVersion) {
61+
$stmt = $this->db->prepare('INSERT OR REPLACE INTO php_version(version, last_release, initial_release_date, end_of_life_date, active_support_until) VALUES(:version, :last_release, :initial_release, :end_of_life_date, :active_support_until)');
62+
$stmt->bindValue('version', $phpVersion->getVersion());
63+
$stmt->bindValue('last_release', $phpVersion->getLastRelease());
64+
$stmt->bindValue('initial_release', $phpVersion->getInitialRelease()->format('Y-m-d'));
65+
$stmt->bindValue('active_support_until', $phpVersion->getActiveSupportUntil()?->format('Y-m-d'));
66+
$stmt->bindValue('end_of_life_date', $phpVersion->getEndOfLife()->format('Y-m-d'));
67+
$stmt->execute();
68+
}
69+
70+
$this->db->commit();
71+
} catch (PDOException $e) {
72+
$this->db->rollBack();
73+
}
74+
}
75+
76+
private function createObjectInstance(array $data): PhpVersion
77+
{
78+
return new PhpVersion(
79+
version: $data['version'],
80+
lastRelease: $data['last_release'],
81+
initialRelease: DateTimeImmutable::createFromFormat('Y-m-d', $data['initial_release_date']),
82+
endOfLife: DateTimeImmutable::createFromFormat('Y-m-d', $data['end_of_life_date']),
83+
activeSupportUntil: $data['active_support_until'] ? DateTimeImmutable::createFromFormat('Y-m-d', $data['active_support_until']) : null,
84+
);
85+
}
86+
}

src/Repository/PhpReleaseRepository.php

Lines changed: 3 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -5,42 +5,13 @@
55
namespace App\Repository;
66

77
use App\Model\PhpRelease;
8-
use PDO;
9-
use PDOException;
108

11-
final class PhpReleaseRepository
9+
interface PhpReleaseRepository
1210
{
13-
public function __construct(
14-
private PDO $db,
15-
) {
16-
}
17-
1811
/**
1912
* @return PhpRelease[]
2013
*/
21-
public function all(): iterable
22-
{
23-
$stmt = $this->db->query('SELECT * FROM php_release ORDER BY release_date DESC');
24-
while ($row = $stmt->fetch()) {
25-
yield PhpRelease::fromArray($row);
26-
}
27-
}
28-
29-
public function save(PhpRelease ...$releases): void
30-
{
31-
$this->db->beginTransaction();
32-
33-
try {
34-
foreach ($releases as $release) {
35-
$stmt = $this->db->prepare('INSERT OR REPLACE INTO php_release(version, release_date) VALUES (:version, :date)');
36-
$stmt->bindValue('version', $release->getVersion());
37-
$stmt->bindValue('date', $release->getReleaseDate()->format('Y-m-d'));
38-
$stmt->execute();
39-
}
14+
public function all(): iterable;
4015

41-
$this->db->commit();
42-
} catch (PDOException $e) {
43-
$this->db->rollBack();
44-
}
45-
}
16+
public function save(PhpRelease ...$releases): void;
4617
}

src/Repository/PhpVersionRepository.php

Lines changed: 5 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -5,79 +5,23 @@
55
namespace App\Repository;
66

77
use App\Model\PhpVersion;
8-
use DateTimeImmutable;
9-
use PDO;
10-
use PDOException;
118

12-
final class PhpVersionRepository
9+
interface PhpVersionRepository
1310
{
14-
public function __construct(
15-
private PDO $db,
16-
) {
17-
}
18-
1911
/**
2012
* @return PhpVersion[]
2113
*/
22-
public function all(): iterable
23-
{
24-
$stmt = $this->db->query('SELECT * FROM php_version ORDER BY end_of_life_date DESC');
25-
while ($row = $stmt->fetch()) {
26-
yield $this->createObjectInstance($row);
27-
}
28-
}
14+
public function all(): iterable;
2915

3016
/**
3117
* @return PhpVersion[]
3218
*/
33-
public function maintenedVersions(): iterable
34-
{
35-
$stmt = $this->db->query('SELECT * FROM php_version WHERE end_of_life_date > DATE("now") ORDER BY end_of_life_date DESC');
36-
while ($row = $stmt->fetch()) {
37-
yield $this->createObjectInstance($row);
38-
}
39-
}
19+
public function maintenedVersions(): iterable;
4020

4121
/**
4222
* @return PhpVersion[]
4323
*/
44-
public function unmaintenedVersions(): iterable
45-
{
46-
$stmt = $this->db->query('SELECT * FROM php_version WHERE end_of_life_date <= DATE("now") ORDER BY end_of_life_date DESC');
47-
while ($row = $stmt->fetch()) {
48-
yield $this->createObjectInstance($row);
49-
}
50-
}
51-
52-
public function save(PhpVersion ...$versions): void
53-
{
54-
$this->db->beginTransaction();
55-
56-
try {
57-
foreach ($versions as $phpVersion) {
58-
$stmt = $this->db->prepare('INSERT OR REPLACE INTO php_version(version, last_release, initial_release_date, end_of_life_date, active_support_until) VALUES(:version, :last_release, :initial_release, :end_of_life_date, :active_support_until)');
59-
$stmt->bindValue('version', $phpVersion->getVersion());
60-
$stmt->bindValue('last_release', $phpVersion->getLastRelease());
61-
$stmt->bindValue('initial_release', $phpVersion->getInitialRelease()->format('Y-m-d'));
62-
$stmt->bindValue('active_support_until', $phpVersion->getActiveSupportUntil()?->format('Y-m-d'));
63-
$stmt->bindValue('end_of_life_date', $phpVersion->getEndOfLife()->format('Y-m-d'));
64-
$stmt->execute();
65-
}
66-
67-
$this->db->commit();
68-
} catch (PDOException $e) {
69-
$this->db->rollBack();
70-
}
71-
}
24+
public function unmaintenedVersions(): iterable;
7225

73-
private function createObjectInstance(array $data): PhpVersion
74-
{
75-
return new PhpVersion(
76-
version: $data['version'],
77-
lastRelease: $data['last_release'],
78-
initialRelease: DateTimeImmutable::createFromFormat('Y-m-d', $data['initial_release_date']),
79-
endOfLife: DateTimeImmutable::createFromFormat('Y-m-d', $data['end_of_life_date']),
80-
activeSupportUntil: $data['active_support_until'] ? DateTimeImmutable::createFromFormat('Y-m-d', $data['active_support_until']) : null,
81-
);
82-
}
26+
public function save(PhpVersion ...$versions): void;
8327
}

0 commit comments

Comments
 (0)