Skip to content

Commit ea624ad

Browse files
committed
Update Version entity with metadata entities integration
Signed-off-by: Tim Goudriaan <tim@codedmonkey.com>
1 parent 2fc831a commit ea624ad

File tree

15 files changed

+225
-98
lines changed

15 files changed

+225
-98
lines changed

migrations/Version20260120114538.php

Lines changed: 105 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,22 @@ final class Version20260120114538 extends AbstractMigration
1111
{
1212
public function getDescription(): string
1313
{
14-
return 'Create metadata tables';
14+
return 'Refactor package metadata';
1515
}
1616

1717
public function up(Schema $schema): void
1818
{
1919
$this->createMetadataTables();
2020
$this->fillMetadataTables();
21+
$this->addCurrentMetadataColumnToVersionTable();
22+
$this->updateVersionTableColumns();
2123
}
2224

2325
public function down(Schema $schema): void
2426
{
2527
$this->dropMetadataTables();
28+
$this->dropCurrentMetadataColumnFromVersionTable();
29+
$this->revertVersionTableColumns();
2630
}
2731

2832
private function createMetadataTables(): void
@@ -281,6 +285,61 @@ private function fillMetadataTables(): void
281285
}
282286
}
283287

288+
private function addCurrentMetadataColumnToVersionTable(): void
289+
{
290+
$this->addSql(<<<'SQL'
291+
ALTER TABLE version ADD current_metadata_id INT DEFAULT NULL
292+
SQL);
293+
$this->addSql(<<<'SQL'
294+
ALTER TABLE
295+
version
296+
ADD
297+
CONSTRAINT FK_BF1CD3C3624A4280 FOREIGN KEY (current_metadata_id) REFERENCES metadata (id)
298+
SQL);
299+
$this->addSql(<<<'SQL'
300+
CREATE UNIQUE INDEX UNIQ_BF1CD3C3624A4280 ON version (current_metadata_id)
301+
SQL);
302+
303+
$this->addSql(<<<'SQL'
304+
UPDATE version
305+
SET current_metadata_id = metadata.id
306+
FROM metadata
307+
WHERE metadata.version_id = version.id
308+
SQL);
309+
}
310+
311+
public function updateVersionTableColumns(): void
312+
{
313+
$this->addSql(<<<'SQL'
314+
DROP INDEX pkg_ver_idx
315+
SQL);
316+
$this->addSql(<<<'SQL'
317+
ALTER TABLE version RENAME COLUMN name TO package_name
318+
SQL);
319+
$this->addSql(<<<'SQL'
320+
ALTER TABLE version RENAME COLUMN version TO name
321+
SQL);
322+
$this->addSql(<<<'SQL'
323+
ALTER TABLE version RENAME COLUMN normalized_version TO normalized_name
324+
SQL);
325+
$this->addSql(<<<'SQL'
326+
CREATE UNIQUE INDEX package_version_idx ON version (package_id, normalized_name)
327+
SQL);
328+
329+
$this->addSql(<<<'SQL'
330+
ALTER TABLE version DROP CONSTRAINT fk_bf1cd3c3f44cabff
331+
SQL);
332+
$this->addSql(<<<'SQL'
333+
ALTER TABLE version ALTER package_id SET NOT NULL
334+
SQL);
335+
$this->addSql(<<<'SQL'
336+
ALTER TABLE
337+
version
338+
ADD
339+
CONSTRAINT FK_BF1CD3C3F44CABFF FOREIGN KEY (package_id) REFERENCES package (id) ON DELETE CASCADE NOT DEFERRABLE
340+
SQL);
341+
}
342+
284343
private function dropMetadataTables(): void
285344
{
286345
$this->addSql(<<<'SQL'
@@ -338,4 +397,49 @@ private function dropMetadataTables(): void
338397
DROP TABLE metadata_suggest_link
339398
SQL);
340399
}
400+
401+
private function dropCurrentMetadataColumnFromVersionTable(): void
402+
{
403+
$this->addSql(<<<'SQL'
404+
ALTER TABLE version DROP CONSTRAINT FK_BF1CD3C3624A4280
405+
SQL);
406+
$this->addSql(<<<'SQL'
407+
DROP INDEX UNIQ_BF1CD3C3624A4280
408+
SQL);
409+
$this->addSql(<<<'SQL'
410+
ALTER TABLE version DROP current_metadata_id
411+
SQL);
412+
}
413+
414+
public function revertVersionTableColumns(): void
415+
{
416+
$this->addSql(<<<'SQL'
417+
DROP INDEX package_version_idx
418+
SQL);
419+
$this->addSql(<<<'SQL'
420+
ALTER TABLE version RENAME COLUMN name TO version
421+
SQL);
422+
$this->addSql(<<<'SQL'
423+
ALTER TABLE version RENAME COLUMN normalized_name TO normalized_version
424+
SQL);
425+
$this->addSql(<<<'SQL'
426+
ALTER TABLE version RENAME COLUMN package_name TO name
427+
SQL);
428+
$this->addSql(<<<'SQL'
429+
CREATE UNIQUE INDEX pkg_ver_idx ON version (package_id, normalized_version)
430+
SQL);
431+
432+
$this->addSql(<<<'SQL'
433+
ALTER TABLE version DROP CONSTRAINT FK_BF1CD3C3F44CABFF
434+
SQL);
435+
$this->addSql(<<<'SQL'
436+
ALTER TABLE version ALTER package_id DROP NOT NULL
437+
SQL);
438+
$this->addSql(<<<'SQL'
439+
ALTER TABLE
440+
version
441+
ADD
442+
CONSTRAINT fk_bf1cd3c3f44cabff FOREIGN KEY (package_id) REFERENCES package (id) NOT DEFERRABLE INITIALLY IMMEDIATE
443+
SQL);
444+
}
341445
}

src/Controller/ApiController.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ public function packageDistribution(Request $request, string $reference, string
128128
throw $this->createNotFoundException();
129129
}
130130

131-
if (null === $version = $this->versionRepository->findOneByNormalizedVersion($package, $versionName)) {
131+
if (null === $version = $this->versionRepository->findOneByNormalizedVersionName($package, $versionName)) {
132132
throw $this->createNotFoundException();
133133
}
134134

src/Doctrine/Entity/Metadata.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ class Metadata extends TrackedEntity
8787
#[ORM\Column(nullable: true)]
8888
private ?\DateTimeImmutable $releasedAt = null;
8989

90-
#[ORM\ManyToOne(targetEntity: Version::class)]
90+
#[ORM\ManyToOne(targetEntity: Version::class, inversedBy: 'metadata')]
9191
#[ORM\JoinColumn(nullable: false, onDelete: 'CASCADE')]
9292
private Version $version;
9393

src/Doctrine/Entity/Package.php

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ public function getVersion(string $normalizedVersion): ?Version
276276
if (!isset($this->cachedVersions)) {
277277
$this->cachedVersions = [];
278278
foreach ($this->getVersions() as $version) {
279-
$this->cachedVersions[strtolower($version->getNormalizedVersion())] = $version;
279+
$this->cachedVersions[strtolower($version->getNormalizedName())] = $version;
280280
}
281281
}
282282

@@ -419,25 +419,25 @@ public function getActiveVersions(): array
419419
$activePrereleaseVersions = [];
420420

421421
foreach ($this->getSortedVersions() as $version) {
422-
if ('stable' !== VersionParser::parseStability($version->getNormalizedVersion())) {
422+
if ('stable' !== VersionParser::parseStability($version->getNormalizedName())) {
423423
continue;
424424
}
425425

426-
[$majorVersion, $minorVersion] = explode('.', $version->getNormalizedVersion());
426+
[$majorVersion, $minorVersion] = explode('.', $version->getNormalizedName());
427427

428428
if ('0' === $majorVersion) {
429429
$prereleaseVersion = "$majorVersion.$minorVersion";
430430

431431
$activePrereleaseVersions[$prereleaseVersion] ??= $version;
432-
if (version_compare($version->getNormalizedVersion(), $activePrereleaseVersions[$prereleaseVersion]->getNormalizedVersion(), '>')) {
432+
if (version_compare($version->getNormalizedName(), $activePrereleaseVersions[$prereleaseVersion]->getNormalizedName(), '>')) {
433433
$activePrereleaseVersions[$prereleaseVersion] = $version;
434434
}
435435

436436
continue;
437437
}
438438

439439
$activeVersions[$majorVersion] ??= $version;
440-
if (version_compare($version->getNormalizedVersion(), $activeVersions[$majorVersion]->getNormalizedVersion(), '>')) {
440+
if (version_compare($version->getNormalizedName(), $activeVersions[$majorVersion]->getNormalizedName(), '>')) {
441441
$activeVersions[$majorVersion] = $version;
442442
}
443443
}
@@ -447,34 +447,34 @@ public function getActiveVersions(): array
447447

448448
// Find newer unstable releases of active versions
449449
foreach ($this->getSortedVersions() as $version) {
450-
if (in_array(VersionParser::parseStability($version->getNormalizedVersion()), ['stable', 'dev'], true)) {
450+
if (in_array(VersionParser::parseStability($version->getNormalizedName()), ['stable', 'dev'], true)) {
451451
continue;
452452
}
453453

454-
[$majorVersion, $minorVersion] = explode('.', $version->getNormalizedVersion());
454+
[$majorVersion, $minorVersion] = explode('.', $version->getNormalizedName());
455455

456456
$developmentVersion = "$majorVersion.$minorVersion";
457457

458458
if ('0' === $majorVersion) {
459-
if (isset($activePrereleaseVersions[$developmentVersion]) && !version_compare($version->getNormalizedVersion(), $activePrereleaseVersions[$developmentVersion]->getNormalizedVersion(), '>')) {
459+
if (isset($activePrereleaseVersions[$developmentVersion]) && !version_compare($version->getNormalizedName(), $activePrereleaseVersions[$developmentVersion]->getNormalizedName(), '>')) {
460460
continue;
461461
}
462462

463463
$activePrereleaseDevelopmentVersions[$developmentVersion] ??= $version;
464-
if (version_compare($version->getNormalizedVersion(), $activePrereleaseDevelopmentVersions[$developmentVersion]->getNormalizedVersion(), '>')) {
464+
if (version_compare($version->getNormalizedName(), $activePrereleaseDevelopmentVersions[$developmentVersion]->getNormalizedName(), '>')) {
465465
$activePrereleaseDevelopmentVersions[$developmentVersion] = $version;
466466
}
467467

468468
continue;
469469
}
470470

471-
if (isset($activeVersions[$majorVersion]) && !version_compare($version->getNormalizedVersion(), $activeVersions[$majorVersion]->getNormalizedVersion(), '>')) {
471+
if (isset($activeVersions[$majorVersion]) && !version_compare($version->getNormalizedName(), $activeVersions[$majorVersion]->getNormalizedName(), '>')) {
472472
continue;
473473
}
474474

475475
$activeDevelopmentVersions[$developmentVersion] ??= $version;
476-
if (version_compare($version->getNormalizedVersion(), $activeDevelopmentVersions[$developmentVersion]->getNormalizedVersion(), '>')) {
477-
$activeDevelopmentVersions[$version->getNormalizedVersion()] = $version;
476+
if (version_compare($version->getNormalizedName(), $activeDevelopmentVersions[$developmentVersion]->getNormalizedName(), '>')) {
477+
$activeDevelopmentVersions[$version->getNormalizedName()] = $version;
478478
}
479479
}
480480

@@ -514,7 +514,7 @@ public function getHistoricalVersions(): array
514514
public function getDevVersions(): array
515515
{
516516
return array_filter($this->getSortedVersions(), static function (Version $version) {
517-
if (str_ends_with($version->getNormalizedVersion(), '.9999999-dev')) {
517+
if (str_ends_with($version->getNormalizedName(), '.9999999-dev')) {
518518
return true;
519519
}
520520

@@ -531,13 +531,13 @@ public function getDevVersions(): array
531531
*/
532532
public function getDevBranchVersions(): array
533533
{
534-
return array_filter($this->getSortedVersions(), static fn (Version $version) => str_starts_with($version->getNormalizedVersion(), 'dev-'));
534+
return array_filter($this->getSortedVersions(), static fn (Version $version) => str_starts_with($version->getNormalizedName(), 'dev-'));
535535
}
536536

537537
public static function sortVersions(Version $a, Version $b): int
538538
{
539-
$aVersion = $a->getNormalizedVersion();
540-
$bVersion = $b->getNormalizedVersion();
539+
$aVersion = $a->getNormalizedName();
540+
$bVersion = $b->getNormalizedName();
541541

542542
// use branch alias for sorting if one is provided
543543
if (isset($a->getExtra()['branch-alias'][$aVersion])) {
@@ -562,7 +562,7 @@ public static function sortVersions(Version $a, Version $b): int
562562
if ($aVersion === $bVersion) {
563563
// make sure sort is stable
564564
if ($a->getReleasedAt() === $b->getReleasedAt()) {
565-
return $a->getNormalizedVersion() <=> $b->getNormalizedVersion();
565+
return $a->getNormalizedName() <=> $b->getNormalizedName();
566566
}
567567

568568
return $b->getReleasedAt() > $a->getReleasedAt() ? 1 : -1;

0 commit comments

Comments
 (0)