/** * Vote up or down for the given comment. * * @param \Illuminate\Http\Request $request * @param $id * @return \Illuminate\Http\JsonResponse */ public function vote(Request $request, $id) { $this->validate($request, ['vote' => 'required|in:up,down']); if (Vote::whereCommentId($id)->whereUserId($request->user()->id)->exists()) { return response()->json(['errors' => 'Already voted!'], 409); } $comment = Comment::findOrFail($id); $up = $request->input('vote') == 'up' ? true : false; $comment->votes()->create(['user_id' => $request->user()->id, 'up' => $up ? 1 : null, 'down' => $up ? null : 1, 'voted_at' => \Carbon\Carbon::now()->toDateTimeString()]); return response()->json(['voted' => $request->input('vote'), 'value' => $comment->votes()->sum($request->input('vote'))]); }