namespace App\Http\Controllers;
use App\Events\ApplicationAdded;
+use App\Events\TournamentChanged;
use App\Models\Application;
+use App\Models\Protocol;
use App\Models\Tournament;
use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Http\Request;
$application->user_id = $request->user()->id;
$application->save();
ApplicationAdded::dispatch($application);
+ Protocol::applicationReceived($tournament, $application, $request->user());
return $tournament->toJson();
}
$tournament = Tournament::with(
'applications',
'applications.user',
- 'rounds',
- 'rounds.results',
'participants',
'participants.user',
)->findOrFail($id);
$this->authorize('view', $tournament);
- foreach ($tournament->rounds as $round) {
+ $rounds = $tournament->rounds()->with(['results', 'results.user'])->limit(25)->get();
+ foreach ($rounds as $round) {
try {
$this->authorize('seeResults', $round);
} catch (AuthorizationException) {
$round->hideResults();
}
}
+ $json = $tournament->toArray();
+ $json['rounds'] = $rounds->toArray();
+ return $json;
+ }
+
+ public function discord(Request $request, Tournament $tournament) {
+ $this->authorize('update', $tournament);
+ $validatedData = $request->validate([
+ 'guild_id' => 'string|nullable',
+ ]);
+ if (array_key_exists('guild_id', $validatedData)) {
+ $tournament->discord = $validatedData['guild_id'];
+ }
+ $tournament->save();
+ if ($tournament->wasChanged()) {
+ TournamentChanged::dispatch($tournament);
+ Protocol::tournamentDiscord($tournament, $request->user());
+ }
+ return $tournament->toJson();
+ }
+
+ public function discordSettings(Request $request, Tournament $tournament) {
+ $this->authorize('update', $tournament);
+ $validatedData = $request->validate([
+ 'round_category' => 'string|nullable',
+ 'round_template' => 'string|nullable',
+ ]);
+ if (array_key_exists('round_category', $validatedData)) {
+ $tournament->discord_round_category = $validatedData['round_category'];
+ }
+ if (array_key_exists('round_template', $validatedData)) {
+ $tournament->discord_round_template = $validatedData['round_template'];
+ }
+ $tournament->save();
+ if ($tournament->wasChanged()) {
+ TournamentChanged::dispatch($tournament);
+ Protocol::tournamentDiscordSettings($tournament, $request->user());
+ }
+ return $tournament->toJson();
+ }
+
+ public function moreRounds(Request $request, Tournament $tournament) {
+ $this->authorize('view', $tournament);
+
+ $validatedData = $request->validate([
+ 'last_known' => 'integer|required',
+ ]);
+
+ $rounds = $tournament->rounds()
+ ->where('number', '<', $validatedData['last_known'])
+ ->with(['results', 'results.user'])
+ ->limit(25)->get();
+ foreach ($rounds as $round) {
+ try {
+ $this->authorize('seeResults', $round);
+ } catch (AuthorizationException) {
+ $round->hideResults();
+ }
+ }
+ return $rounds->toArray();
+ }
+
+ public function settings(Request $request, Tournament $tournament) {
+ $this->authorize('update', $tournament);
+ $validatedData = $request->validate([
+ 'show_numbers' => 'boolean|nullable',
+ ]);
+ if (array_key_exists('show_numbers', $validatedData)) {
+ $tournament->show_numbers = $validatedData['show_numbers'];
+ }
+ $tournament->save();
+ if ($tournament->wasChanged()) {
+ TournamentChanged::dispatch($tournament);
+ Protocol::tournamentSettings($tournament, $request->user());
+ }
+ return $tournament->toJson();
+ }
+
+ public function open(Request $request, Tournament $tournament) {
+ $this->authorize('update', $tournament);
+ $tournament->accept_applications = true;
+ $tournament->save();
+ TournamentChanged::dispatch($tournament);
+ Protocol::tournamentOpened($tournament, $request->user());
+ return $tournament->toJson();
+ }
+
+ public function close(Request $request, Tournament $tournament) {
+ $this->authorize('update', $tournament);
+ $tournament->accept_applications = false;
+ $tournament->save();
+ TournamentChanged::dispatch($tournament);
+ Protocol::tournamentClosed($tournament, $request->user());
+ return $tournament->toJson();
+ }
+
+ public function lock(Request $request, Tournament $tournament) {
+ $this->authorize('update', $tournament);
+ $tournament->locked = true;
+ $tournament->save();
+ TournamentChanged::dispatch($tournament);
+ Protocol::tournamentLocked($tournament, $request->user());
+ return $tournament->toJson();
+ }
+
+ public function unlock(Request $request, Tournament $tournament) {
+ $this->authorize('update', $tournament);
+ $tournament->locked = false;
+ $tournament->save();
+ TournamentChanged::dispatch($tournament);
+ Protocol::tournamentUnlocked($tournament, $request->user());
return $tournament->toJson();
}