X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=app%2FHttp%2FControllers%2FResultController.php;h=ba57c4b0759f45c33b0bb72fe776ec02cc65a5c7;hb=ebdf8e5f6761de2abd85b01096a67dee62d7d4aa;hp=d31d444950178ce8829e09d8d5c759add4322242;hpb=55f2d7cd6c290a0d26db177d54d20c393f890bbb;p=alttp.git diff --git a/app/Http/Controllers/ResultController.php b/app/Http/Controllers/ResultController.php index d31d444..ba57c4b 100644 --- a/app/Http/Controllers/ResultController.php +++ b/app/Http/Controllers/ResultController.php @@ -2,9 +2,73 @@ namespace App\Http\Controllers; +use App\Events\ResultChanged; +use App\Models\DiscordBotCommand; +use App\Models\Protocol; +use App\Models\Result; +use App\Models\Round; +use App\Models\User; use Illuminate\Http\Request; class ResultController extends Controller { - // + + public function create(Request $request) { + $validatedData = $request->validate([ + 'comment' => 'string', + 'forfeit' => 'boolean', + 'round_id' => 'required|exists:App\\Models\\Round,id', + 'time' => 'numeric', + 'user_id' => 'required|exists:App\\Models\\User,id', + 'vod' => 'string|url', + ]); + + $round = Round::findOrFail($validatedData['round_id']); + + if ($validatedData['user_id'] != $request->user()->id) { + $this->authorize('create', Result::class); + } + + $result = Result::firstOrCreate([ + 'round_id' => $validatedData['round_id'], + 'user_id' => $validatedData['user_id'], + ]); + if (!$round->locked) { + if (isset($validatedData['forfeit'])) $result->forfeit = $validatedData['forfeit']; + if (isset($validatedData['time'])) $result->time = $validatedData['time']; + } + $result->comment = !empty($validatedData['comment']) ? $validatedData['comment'] : null; + $result->vod = !empty($validatedData['vod']) ? $validatedData['vod'] : null; + $result->save(); + + if ($result->wasChanged()) { + ResultChanged::dispatch($result); + } + + if ($result->wasChanged(['forfeit', 'time'])) { + Protocol::resultReported( + $round->tournament, + $result, + $request->user(), + ); + DiscordBotCommand::queueResult($result); + } else if ($result->wasChanged(['comment', 'vod'])) { + Protocol::resultCommented( + $round->tournament, + $result, + $request->user(), + ); + } + + $round->load('results'); + $round->updatePlacement(); + if ($round->tournament->hasScoreboard()) { + $round->tournament->updatePlacement(); + } + + $result->load('user'); + + return $result->toJson(); + } + }