validate([ 'forfeit' => 'boolean', 'participant_id' => 'required|exists:App\\Models\\Participant,id', 'round_id' => 'required|exists:App\\Models\\Round,id', 'time' => 'required_if:forfeit,false|numeric', ]); error_log(var_export($validatedData, true)); $participant = Participant::findOrFail($validatedData['participant_id']); $round = Round::findOrFail($validatedData['round_id']); if (!$round || $round->locked) { abort(403); } $user = $request->user(); if ($user->id != $participant->user->id) { $this->authorize('create', Result::class); } $result = Result::updateOrCreate([ 'round_id' => $validatedData['round_id'], 'user_id' => $participant->user_id, ], [ 'forfeit' => $validatedData['forfeit'], 'time' => isset($validatedData['time']) ? $validatedData['time'] : 0, ]); if ($result->wasChanged()) { ResultChanged::dispatch($result); } $round->load('results'); $round->updatePlacement(); $round->tournament->updatePlacement(); Protocol::resultReported( $round->tournament, $result, $request->user(), ); return $result->toJson(); } }