Skip to content

Commit 1ecb93d

Browse files
committed
Refactor PackageDistributionResolver to use Metadata entities
1 parent c01e4cd commit 1ecb93d

3 files changed

Lines changed: 25 additions & 11 deletions

File tree

src/Controller/ApiController.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
use CodedMonkey\Dirigent\Attribute\IsGrantedAccess;
88
use CodedMonkey\Dirigent\Attribute\MapPackage;
99
use CodedMonkey\Dirigent\Doctrine\Entity\Package;
10+
use CodedMonkey\Dirigent\Doctrine\Repository\MetadataRepository;
1011
use CodedMonkey\Dirigent\Doctrine\Repository\PackageRepository;
11-
use CodedMonkey\Dirigent\Doctrine\Repository\VersionRepository;
1212
use CodedMonkey\Dirigent\Entity\PackageFetchStrategy;
1313
use CodedMonkey\Dirigent\Entity\PackageUpdateSource;
1414
use CodedMonkey\Dirigent\Message\TrackInstallations;
@@ -36,7 +36,7 @@ class ApiController extends AbstractController
3636
public function __construct(
3737
private readonly EntityManagerInterface $entityManager,
3838
private readonly PackageRepository $packageRepository,
39-
private readonly VersionRepository $versionRepository,
39+
private readonly MetadataRepository $metadataRepository,
4040
private readonly PackageMetadataResolver $metadataResolver,
4141
private readonly PackageDistributionResolver $distributionResolver,
4242
private readonly PackageProviderManager $providerManager,
@@ -130,15 +130,15 @@ public function packageDistribution(Request $request, string $reference, string
130130
throw $this->createNotFoundException();
131131
}
132132

133-
if (null === $version = $this->versionRepository->findOneByNormalizedName($package, $versionName)) {
133+
if (null === $metadata = $this->metadataRepository->findOneByNormalizedNameAndReference($package, $versionName, $reference)) {
134134
throw $this->createNotFoundException();
135135
}
136136

137-
if ($version->isDevelopment() && !$this->getParameter('dirigent.distributions.dev_versions')) {
137+
if ($metadata->getVersion()->isDevelopment() && !$this->getParameter('dirigent.distributions.dev_versions')) {
138138
throw $this->createNotFoundException();
139139
}
140140

141-
if (!$this->distributionResolver->resolve($version, $reference, $type)) {
141+
if (!$this->distributionResolver->resolve($metadata, $type)) {
142142
throw $this->createNotFoundException();
143143
}
144144
}

src/Doctrine/Repository/MetadataRepository.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,21 @@ public function findAllMetadataForVersion(Version $version): array
7373
);
7474
}
7575

76+
public function findOneByNormalizedNameAndReference(Package $package, string $normalizedVersionName, string $reference): ?Metadata
77+
{
78+
$builder = $this->createQueryBuilder('metadata')
79+
->leftJoin('metadata.version', 'version')
80+
->andWhere('metadata.package = :package')
81+
->andWhere('version.normalizedName = :versionName')
82+
->andWhere('metadata.sourceReference = :reference OR (metadata.sourceReference IS NULL AND metadata.distReference = :reference)')
83+
->setParameter('package', $package)
84+
->setParameter('versionName', $normalizedVersionName)
85+
->setParameter('reference', $reference)
86+
->setMaxResults(1);
87+
88+
return $builder->getQuery()->getOneOrNullResult();
89+
}
90+
7691
/**
7792
* Returns a map of version ID => metadata count for all versions of the given package.
7893
*

src/Package/PackageDistributionResolver.php

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
namespace CodedMonkey\Dirigent\Package;
66

77
use CodedMonkey\Dirigent\Composer\ComposerClient;
8-
use CodedMonkey\Dirigent\Doctrine\Entity\Version;
8+
use CodedMonkey\Dirigent\Doctrine\Entity\Metadata;
99
use Symfony\Component\DependencyInjection\Attribute\Autowire;
1010
use Symfony\Component\Filesystem\Filesystem;
1111

@@ -33,18 +33,17 @@ public function path(string $packageName, string $versionName, string $reference
3333
return "{$this->storagePath}/{$packageName}/{$versionName}-{$reference}.{$type}";
3434
}
3535

36-
public function resolve(Version $version, string $reference, string $type): bool
36+
public function resolve(Metadata $metadata, string $type): bool
3737
{
38-
$package = $version->getPackage();
38+
$package = $metadata->getPackage();
3939
$packageName = $package->getName();
40-
$versionName = $version->getNormalizedName();
40+
$versionName = $metadata->getNormalizedVersionName();
41+
$reference = $metadata->getDistReference();
4142

4243
if ($this->exists($packageName, $versionName, $reference, $type)) {
4344
return true;
4445
}
4546

46-
$metadata = $version->getCurrentMetadata();
47-
4847
if ($reference !== $metadata->getDistributionReference() || $type !== $metadata->getDistributionType()) {
4948
return false;
5049
}

0 commit comments

Comments
 (0)