/**
  * @param Review $review
  */
 public function deduceMissingFields(Review $review)
 {
     $restaurant = $review->getRestaurant();
     $user = $review->getUser();
     if (null === $user || null === $restaurant) {
         return;
     }
     if (null === $review->getGeoname()) {
         $review->setGeoname($restaurant->getGeoname());
     }
     if (null === $review->getCuisine()) {
         $review->setCuisine($restaurant->getCuisine());
     }
     if (null === $review->getCost()) {
         $review->setCost($restaurant->getAverageCost());
     }
     if (null === $review->getPosition()) {
         $max = $this->reviewRepository->getMaxPosition($user, $review);
         $review->setPosition($max + 1);
     }
 }
 /**
  * @ApiDoc(
  *  description="New Batch of Reviews",
  *  statusCodes={201="Batch of Reviews"},
  *  section="Review",
  *  parameters={
  *      {"name"="restaurants", "dataType"="integer", "required"=true }
  * })
  * @Route("/api/reviews/batch")
  * @Method({"POST"})
  * @return View
  */
 public function batchInsertAction()
 {
     $user = $this->getUser();
     $positions = array();
     $request = $this->requestStack->getCurrentRequest();
     $ids = $request->request->get('restaurants');
     $restaurants = $this->restaurantRepository->getByIds($ids);
     $reviews = array();
     /** @var Restaurant $restaurant */
     foreach ($restaurants as $restaurant) {
         if (null === $restaurant->getGeoname() || null === $restaurant->getCuisine()) {
             continue;
         }
         if (isset($positions[$restaurant->getRankingKey()])) {
             $positions[$restaurant->getRankingKey()]++;
         } else {
             $positions[$restaurant->getRankingKey()] = 1;
         }
         $review = new Review();
         $review->setGeoname($restaurant->getGeoname());
         $review->setCost($restaurant->getAverageCost());
         $review->setCuisine($restaurant->getCuisine());
         $review->setPosition($positions[$restaurant->getRankingKey()]);
         $review->setUser($user);
         $review->setComment('');
         $review->setRestaurant($restaurant);
         $reviews[] = $review;
         $this->validate($review);
         $user->incrementReviewsCount();
         $this->entityManager->persist($review);
         $this->cacheManager->invalidateOnInsert($review);
     }
     $this->entityManager->flush();
     return $this->view(array('reviews' => $reviews), 201);
 }