/** * @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()); }