+
+ public function create(Request $request) {
+ $validatedData = $request->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();
+ }
+