From: Daniel Karbach Date: Mon, 30 Jun 2025 17:05:49 +0000 (+0200) Subject: full stepladder schedule sync command X-Git-Url: https://git.localhorst.tv/?a=commitdiff_plain;h=156465f22a5de97d1e516a94ed841c889d3a4765;p=alttp.git full stepladder schedule sync command --- diff --git a/app/Console/Commands/SyncStepLadderFull.php b/app/Console/Commands/SyncStepLadderFull.php new file mode 100644 index 0000000..a81033f --- /dev/null +++ b/app/Console/Commands/SyncStepLadderFull.php @@ -0,0 +1,95 @@ +where(function (Builder $query) { + $query->whereNull('end'); + $query->orWhere('end', '>', now()); + }) + ->get(); + + foreach ($events as $event) { + try { + $this->line('syncing '.$event->name); + $this->syncEvent($event); + } catch (\Exception $e) { + $this->error('error syncing event '.$event->name.': '.$e->getMessage()); + } + } + } + + private function syncEvent(Event $event) { + $ladderSchedule = Http::get('https://alttpr.racing/api/v1/schedule')->json(); + foreach ($ladderSchedule as $ladderEntry) { + try { + $this->syncSchedule($event, $ladderEntry); + } catch (\Exception $e) { + $this->error('error syncing episode '.$ladderEntry['id'].': '.$e->getMessage()); + } + } + } + + private function syncSchedule(Event $event, $ladderEntry) { + $ext_id = 'stepladder:'.$ladderEntry['id']; + $episode = Episode::firstWhere('ext_id', '=', $ext_id); + if (!$episode) { + $episode = new Episode(); + $episode->ext_id = $ext_id; + } + $mode = $this->getMode($ladderEntry); + $episode->event()->associate($event); + $episode->title = $mode->name; + $episode->start = Carbon::createFromFormat('Y-m-d H:i:s', $ladderEntry['time'], 'America/Detroit')->setTimezone('UTC'); + $episode->estimate = 2 * 60 * 60; + $episode->confirmed = true; + $episode->save(); + } + + private function getMode($ladderEntry) { + $ext_id = 'stepladder:'.$ladderEntry['mode']; + $mode = StepLadderMode::firstWhere('ext_id', '=', $ext_id); + if (!$mode) { + $ladderMode = Http::get('https://alttpr.racing/api/v1/modes/'.$ladderEntry['mode'])->json(); + $mode = new StepLadderMode(); + $mode->ext_id = $ext_id; + $mode->name = $ladderMode['name']; + $mode->last_sync = Carbon::now(); + $mode->save(); + } + return $mode; + } + +}