]> git.localhorst.tv Git - alttp.git/blobdiff - app/Http/Controllers/ResultController.php
result reporting
[alttp.git] / app / Http / Controllers / ResultController.php
index d31d444950178ce8829e09d8d5c759add4322242..37ebf3b4acc51b995bf47b1f0f4d3686814f29da 100644 (file)
@@ -2,9 +2,47 @@
 
 namespace App\Http\Controllers;
 
+use App\Events\ResultReported;
+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([
+                       'participant_id' => 'required|exists:App\\Models\\Participant,id',
+                       'round_id' => 'required|exists:App\\Models\\Round,id',
+                       'time' => 'required|numeric',
+               ]);
+
+               $participant = Participant::findOrFail($validatedData['participant_id']);
+               $round = Round::findOrFail($validatedData['round_id']);
+
+               $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,
+               ], [
+                       'time' => $validatedData['time'],
+               ]);
+
+               Protocol::resultReported(
+                       $round->tournament,
+                       $result,
+                       $request->user(),
+               );
+
+               ResultReported::dispatch($result);
+
+               return $result->toJson();
+       }
+
 }