/** * Creates or update a package in MongoDB from the Package passed in parameter. * * @param Package $package * @return array */ public function createOrUpdatePackage(Package $package) { $packageVersion = $this->get($package->getName(), $package->getPrettyVersion()); if (!$packageVersion) { $packageVersion = ["packageName" => $package->getName(), "packageVersion" => $package->getPrettyVersion()]; } $packageVersion['releaseDate'] = new \MongoDate($package->getReleaseDate()->getTimestamp()); $packageVersion['type'] = $package->getType(); $packageVersion['sourceUrl'] = $package->getSourceUrl(); $packageVersion['realVersion'] = $package->getVersion(); if ($package instanceof CompletePackage) { $packageVersion['description'] = $package->getDescription(); } $this->collection->save($packageVersion); // Boost = 1 + download/10 + favers // TODO: we could improve the score of packages by the number of times they are referred by other packages. $score = 1; if (isset($packageVersion['downloads'])) { $score += $packageVersion['downloads'] / 10; } if (isset($packageVersion['favers'])) { $score += $packageVersion['favers']; } $this->itemDao->applyScore($package->getName(), $score); $this->elasticSearchService->storeItemName($package->getName(), 'package', $score); return $packageVersion; }