/**
  * @param Request              $request
  * @param BuildcraftApiManager $buildcraftApiManager
  * @param Guard                $guard
  * @param CollectionUserVote   $collectionUserVote
  *
  * @return \Illuminate\Http\JsonResponse
  */
 public function voteOnCollection(Request $request, BuildcraftApiManager $buildcraftApiManager, Guard $guard, CollectionUserVote $collectionUserVote)
 {
     $userId = $guard->user()->getAuthIdentifier();
     $input = $request->all();
     $errors = false;
     $data = null;
     $success = true;
     $collectionHasVote = $collectionUserVote->where('user_id', $userId)->where('collection_id', $input['collectionId'])->first();
     if (null === $collectionHasVote) {
         if ($input['voteType'] == 'upvote') {
             $collectionUserVote->insert(['collection_id' => $input['collectionId'], 'user_id' => $userId, 'vote' => 1]);
             $data['vote'] = 1;
         } else {
             $collectionUserVote->insert(['collection_id' => $input['collectionId'], 'user_id' => $userId, 'vote' => -1]);
             $data['vote'] = -1;
         }
         return $buildcraftApiManager->setCode(200)->setDataErrors($errors)->setDataData($data)->setDataSuccess($success)->responseJson($buildcraftApiManager->getData());
     }
     if ($input['voteType'] == 'upvote') {
         if ($collectionHasVote->vote == 1) {
             $errors = ['upvoteAlreadyExists' => true];
             $success = false;
         } elseif ($collectionHasVote->vote == 0) {
             $collectionHasVote->update(['vote' => 1]);
             $data['vote'] = 1;
         } else {
             $collectionHasVote->update(['vote' => 0]);
             $data['vote'] = 0;
         }
     } else {
         if ($collectionHasVote->vote == -1) {
             $errors = ['downvoteAlreadyExists' => true];
             $success = false;
         } elseif ($collectionHasVote->vote == 0) {
             $collectionHasVote->update(['vote' => -1]);
             $data['vote'] = -1;
         } else {
             $collectionHasVote->update(['vote' => 0]);
             $data['vote'] = 0;
         }
     }
     return $buildcraftApiManager->setCode(200)->setDataErrors($errors)->setDataData($data)->setDataSuccess($success)->responseJson($buildcraftApiManager->getData());
 }
 /**
  * @param                      $archiveName
  * @param BuildcraftApiManager $buildcraftApiManager
  * @param PathBuilder          $pathBuilder
  *
  * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View|\Symfony\Component\HttpFoundation\BinaryFileResponse
  */
 public function download($archiveName, BuildcraftApiManager $buildcraftApiManager, PathBuilder $pathBuilder)
 {
     return $buildcraftApiManager->responseBinary($archiveName, $pathBuilder);
 }