validateRequest($request)['status'] == 'failed') { return response()->json($this->validateRequest($request)); } $this->insertVote($request); return response()->json([ 'status' => 'success', 'message' => 'Voted successfully', 'result' => Result::where('voter_id', Auth::id())->get() ]); } private function insertVote($request) { // dd($request->vote[0]['nominee_id']); $votes = array_map(function($nominee_id) use($request){ return[ 'voter_id' => Auth::id(), 'election_id' => Util::getCurrentElection(), 'position_id' => $request->vote[0]['position_id'], 'nominee_id' => $nominee_id ]; },$request->vote[0]['nominee_id']); foreach($votes as $vote){ Result::updateOrCreate([ 'voter_id' => $vote['voter_id'], 'election_id' => $vote['election_id'], 'position_id' => $vote['position_id'], 'nominee_id' => $vote['nominee_id'], ]); } } private function validNominee($id, $position_id) { try{ $nominee = Nominee::where('position_id', '=', $position_id)->whereIn('id',$id)->count(); }catch(Exception $e){ dd($id); } return $nominee; } private function isPositionExist($id) { try{ return Position::where('id', $id)->count(); }catch(Exception $e){ dd($id); } } private function voteAllPosition($request) { $total_position = Position::where('election_id', Util::getCurrentElection())->count(); $total_vote = !empty($request->vote) ? count($request->vote) : 0; return $total_vote >= $total_position; } private function validateRequest($request) { $result['status'] = 'failed'; $vote = $request->vote; /** * Check if the user vote on all position */ if (!$this->voteAllPosition($request)) { dd('test'); $result['message'] = 'You must vote on all position.'; return $result; } foreach ($vote as $value) { /** * Check if position_id and nominee_id has a value */ // dd($vote,$value); if (empty($value['position_id']) || empty($value['nominee_id'])) { dd($value,empty($value['position_id']),empty($value['nominee_id'])); $result['message'] = 'You must vote on all position.'; return $result; } /** * Check if the Position you vote exists */ if (!$this->isPositionExist($value['position_id'])) { dd('test'); $result['message'] = 'Invalid Position.'; return $result; } /** * Check if the Nominee you vote on certain position exists */ // elseif (!$this->validNominee($value['nominee_id'], $value['position_id'])) { elseif($this->validNominee($value['nominee_id'],$value['position_id']) <= 0){ $result['message'] = 'Invalid Nominee for '.Position::find($value['position_id'])->name.' position.'; return $result; } } return ['status'=>'success']; } }