/**
  * @ApiDoc(
  *  description="Expertise list",
  *  statusCodes={200="Expertise"},
  *  section="Expertise",
  *  filters={
  *      {"name"="user", "dataType"="integer", "required"=true},
  *      {"name"="wish", "dataType"="boolean", "required"=false},
  *      {"name"="groupBy", "dataType"="string", "required"=false, "pattern"="cuisine|geoname"}
  *  })
  * @Route("/api/expertise")
  * @Route("/public-api/expertise")
  * @Method({"GET"})
  * @throws BadRequestException
  * @Cache(maxage="+1 day", public=true)
  * @return View
  */
 public function getAllAction()
 {
     $request = $this->requestStack->getCurrentRequest();
     $user = (int) $this->requestStack->getCurrentRequest()->query->get('user');
     $groupBy = $this->requestStack->getCurrentRequest()->query->get('groupBy');
     $wish = (bool) $this->requestStack->getCurrentRequest()->query->get('wish');
     if (!isset($user)) {
         throw new BadRequestException(array('exception.bad_request.missing_parameters'));
     }
     if ($wish) {
         return $this->getWishList();
     }
     $expertiseList = $this->reviewRepository->getExpertiseByUser($user, $groupBy);
     $this->cacheManager->tagController($request, CacheTag::REVIEW);
     return $this->view(array('expertise' => $expertiseList));
 }
 /**
  * @ApiDoc(
  *  description="Restaurant reviewed array of id",
  *  statusCodes={200="Restaurant"},
  *  section="Restaurant",
  *  filters={
  *      {"name"="user", "dataType"="integer", "required"=true}
  *  })
  * @Route("/api/restaurants/reviewed/ids")
  * @Cache(maxage="+1 week", public=true)
  * @Method({"GET"})
  * @throws BadRequestException
  * @return View
  */
 public function getReviewedAction()
 {
     $request = $this->requestStack->getCurrentRequest();
     $userId = $request->query->get('user');
     if (!$userId) {
         throw new BadRequestException();
     }
     $restaurants = $this->reviewRepository->getReviewsIdsOf($userId);
     $this->cacheManager->tagController($request, CacheTag::REVIEW);
     return $this->view(array('restaurants' => $restaurants));
 }
 /**
  * @param integer $id
  *
  * @ApiDoc(
  *  description="Delete Review",
  *  statusCodes={204="Review Deleted"},
  *  section="Review")
  * @Route("/api/reviews/{id}")
  * @Method({"DELETE"})
  * @return View
  */
 public function deleteAction($id)
 {
     $user = $this->getUser();
     $review = $this->reviewRepository->get($id);
     $this->securityCheck(Permission::WRITE, $review);
     $this->entityManager->remove($review);
     $user->decrementReviewsCount();
     $this->entityManager->flush();
     $this->reviewManager->autoReorderRankingOfReview($review);
     $this->dispatch(ApiEvent::REVIEW_DELETED, new ReviewDeletedEvent($review));
     $this->cacheManager->invalidateOnDelete($review);
     return $this->view(array(), 204);
 }
 protected function getRestaurantsIds(Request $request)
 {
     $reviewedBy = $request->query->get('reviewedBy');
     $wishedBy = $request->query->get('wishedBy');
     $results = array();
     if ($reviewedBy && $wishedBy) {
         $wishedRestaurants = $this->wishRepository->getWishesIdsOf($wishedBy);
         $reviewedRestaurants = $this->reviewRepository->getReviewsIdsOf($reviewedBy);
         $results = array_unique(array_merge($wishedRestaurants, $reviewedRestaurants));
     } else {
         if ($reviewedBy) {
             $results = $this->reviewRepository->getReviewsIdsOf($reviewedBy);
         } else {
             if ($wishedBy) {
                 $results = $this->wishRepository->getWishesIdsOf($wishedBy);
             }
         }
     }
     return $results;
 }