Browse Source

Refresh versions before rendering the package API json to avoid half empty dataset

Jordi Boggiano 7 years ago
parent
commit
039cccfb14

+ 1 - 0
src/Packagist/WebBundle/Entity/Package.php

@@ -183,6 +183,7 @@ class Package
     {
         $versions = array();
         $versionIds = [];
+        $this->versions = $versionRepo->refreshVersions($this->getVersions());
         foreach ($this->getVersions() as $version) {
             $versionIds[] = $version->getId();
         }

+ 22 - 0
src/Packagist/WebBundle/Entity/VersionRepository.php

@@ -56,6 +56,28 @@ class VersionRepository extends EntityRepository
         $em->remove($version);
     }
 
+    public function refreshVersions($versions)
+    {
+        $versionIds = [];
+        foreach ($versions as $version) {
+            $versionIds[] = $version->getId();
+            $this->getEntityManager()->detach($version);
+        }
+
+        $refreshedVersions = $this->findBy(['id' => $versionIds]);
+        $versionsById = [];
+        foreach ($refreshedVersions as $version) {
+            $versionsById[$version->getId()] = $version;
+        }
+
+        $refreshedVersions = [];
+        foreach ($versions as $version) {
+            $refreshedVersions[] = $versionsById[$version->getId()];
+        }
+
+        return $refreshedVersions;
+    }
+
     public function getVersionData(array $versionIds)
     {
         $links = [