Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions App/Helpers/Helper.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?php

function response_json(int $status,string $message){
return response()->json([
'status'=>$status,
'message'=>$message
]);
}
5 changes: 5 additions & 0 deletions App/Http/Controllers/VoiceController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
public function voice(VoiceRequest $request,Question $question){

return (new VoteService)->validateOrUpdateOrCreate($request->validated(),$question);

}
9 changes: 9 additions & 0 deletions App/Http/Providers/AppServiceProvider.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@




//

require '../../Helpers/Helper.php';

//
17 changes: 17 additions & 0 deletions App/Http/Requests/VoiceRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
$question = Question::find(request['question_id']);
request('auth_id') = auth()->user()->id;
request('question_user_id') = $question->user_id;

return [
'question_id'=>'required|int|exists:questions,id',
'value'=>'required|boolean',
'auth_id'=>'different:question_user_id'
];



public function messages(){
return [
'auth_id.different' => response_json(500,'The user is not allowed to vote to your question')
];
}
6 changes: 6 additions & 0 deletions App/Model/Vote.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
public function scopeFindQuestion($builder,int $question_id){
return $builder->where([
['user_id','=',auth()->id()],
['question_id','=',$question_id
]);
}
3 changes: 3 additions & 0 deletions App/Observers/VoiceObserver.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
public function creating(Voice $voice){
$voice['user_id'] = auth()->id();
}
54 changes: 54 additions & 0 deletions App/Services/VoteService.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
<?php


namespace App\Services;


class VoteServive
{
// check if user voted returns error or if allowed to vote updates the vote or creates one
public function validateOrUpdateOrCreate($request,$question)
{
$validation = $this->validate($request);

if ( $validation['needs update'] ) {
return $this->update($validation['needs update'],$request['value']);
}elseif ($validation['error']) {
return $validation['error'];
}

return $this->create($question,$request['value']);
}

public function update($voice,string $value)
{
$voice->update([
'value'=>$value
]);

return response_json(201,'update your voice');
}

public function create($question,$value)
{
$question->voice()->create([
'value'=>$value
]);

return response_json(200,'Voting completed successfully');
}

public function validate($request)
{
$voice=Voice::findQuestion($request['question_id'])->first();

if ( !is_null($voice)&&$voice->value!==$request['value'] ) {
return ['needs update'=>$voice];

}elseif( is_null($voice)&&$voice->value==$request['value'] ){
return [
'error'=>response_json(500,'The user is not allowed to vote more than once')
];
}
}
}
48 changes: 0 additions & 48 deletions VoiceController.php

This file was deleted.