diff --git a/VoiceController.php b/VoiceController.php index b0a3f1c..f4654c6 100644 --- a/VoiceController.php +++ b/VoiceController.php @@ -1,48 +1,36 @@ -public function voice(Request $request){ - $request->validate([ - 'question_id'=>'required|int|exists:questions,id', - 'value'=>'required|boolean', - ]); +public function voice(Request $request) +{ - $question=Question::find($request->post('question_id')); - if (!$question) - return response()->json([ - 'status'=>404, - 'message'=>'not found question ..' - ]); - if ($question->user_id==auth()->id()) - return response()->json([ - 'status' => 500, - 'message' => 'The user is not allowed to vote to your question' - ]); + // can't voice on own question + $question = Question::where('user_id','<>',Auth::id())->findOrFail($request->question_id)); - //check if user voted - $voice=Voice::where([ - ['user_id','=',auth()->id()], - ['question_id','=',$request->post('question_id')] - ])->first(); - if (!is_null($voice)&&$voice->value===$request->post('value')) { - return response()->json([ - 'status' => 500, - 'message' => 'The user is not allowed to vote more than once' - ]); - }else if (!is_null($voice)&&$voice->value!==$request->post('value')){ - $voice->update([ - 'value'=>$request->post('value') - ]); - return response()->json([ - 'status'=>201, - 'message'=>'update your voice' - ]); - } + // assumes there is a relationship of a user's voices + Auth::user()->voices()->updateOrCreate( + ['question_id' => $question->id], + ['value' => !! $request->value] // no need to validate just coerce to boolean, ideally change name + ); - $question->voice()->create([ - 'user_id'=>auth()->id(), - 'value'=>$request->post('value') + return response()->json([ + 'status' => 200, + 'message' => 'Voting recorded successfully' ]); +} + +// version using route model binding +public function voice(Request $request, Question $question) +{ + + // can't voice on own question + abort_if($question->user_id == Auth::id()),403,'You cannot voice your own question'); + + // assumes there is a relationship of a user's voices + Auth::user()->voices()->updateOrCreate( + ['question_id' => $question->id], + ['value' => !! $request->value] // no need to validate just coerce to boolean, ideally change name + ); return response()->json([ - 'status'=>200, - 'message'=>'Voting completed successfully' + 'status' => 200, + 'message' => 'Voting recorded successfully' ]); -} \ No newline at end of file +}