X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=app%2FHttp%2FControllers%2FResultController.php;h=5102c8aa01ebec790a2aa4deea0aacc90d32b574;hb=82b95e7542824bcdf4f1b245559cb1c93f4eafdd;hp=d31d444950178ce8829e09d8d5c759add4322242;hpb=55f2d7cd6c290a0d26db177d54d20c393f890bbb;p=alttp.git diff --git a/app/Http/Controllers/ResultController.php b/app/Http/Controllers/ResultController.php index d31d444..5102c8a 100644 --- a/app/Http/Controllers/ResultController.php +++ b/app/Http/Controllers/ResultController.php @@ -2,9 +2,57 @@ namespace App\Http\Controllers; +use App\Events\ResultChanged; +use App\Models\Participant; +use App\Models\Protocol; +use App\Models\Result; +use App\Models\Round; use Illuminate\Http\Request; class ResultController extends Controller { - // + + 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(); + } + }