diff --git a/QuestionRequest.php b/QuestionRequest.php new file mode 100644 index 0000000..9a84088 --- /dev/null +++ b/QuestionRequest.php @@ -0,0 +1,31 @@ + 'required|int|exists:questions,id', + 'value' => 'required|boolean', + ]; + } +} diff --git a/VoiceController.php b/VoiceController.php index b0a3f1c..d28fbb6 100644 --- a/VoiceController.php +++ b/VoiceController.php @@ -1,48 +1,48 @@ -public function voice(Request $request){ - $request->validate([ - 'question_id'=>'required|int|exists:questions,id', - 'value'=>'required|boolean', - ]); +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' - ]); +namespace App\Http\Controllers; - //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') +use App\Http\Requests\QuestionRequest; +use App\Models\Question; +use Illuminate\Http\Request; + +class VoiceController extends Controller +{ + public function voice(QuestionRequest $request) + { + $question = Question::findOrFail($request->post('question_id')); + + if ($question->user_id == auth()->id()) { + return response()->json([ + 'status' => 500, + 'message' => 'The user is not allowed to vote to your question' + ], 500); + } + + $voice = Voice::firstOrCreate([ + ['user_id' => auth()->id(), 'question_id' => $request->post('question_id')], + ['value' => $request->post('value')] ]); + + if (!$voice->wasRecentlyCreated) { + if ($voice->value !== $request->post('value')) { + $voice->update([ + 'value' => $request->post('value') + ]); + return response()->json([ + 'status' => 201, + 'message' => 'Update your voice' + ]); + } + return response()->json([ + 'status' => 500, + 'message' => 'The user is not allowed to vote more than once' + ]); + } + return response()->json([ - 'status'=>201, - 'message'=>'update your voice' + 'status' => 200, + 'message' => 'Voting completed successfully' ]); } - - $question->voice()->create([ - 'user_id'=>auth()->id(), - 'value'=>$request->post('value') - ]); - - return response()->json([ - 'status'=>200, - 'message'=>'Voting completed successfully' - ]); -} \ No newline at end of file +}