From 156465f22a5de97d1e516a94ed841c889d3a4765 Mon Sep 17 00:00:00 2001 From: Daniel Karbach Date: Mon, 30 Jun 2025 19:05:49 +0200 Subject: [PATCH] full stepladder schedule sync command --- app/Console/Commands/SyncStepLadderFull.php | 95 +++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 app/Console/Commands/SyncStepLadderFull.php 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; + } + +} -- 2.39.5