]> git.localhorst.tv Git - alttp.git/commitdiff
expand ladder zossy shorthands
authorDaniel Karbach <daniel.karbach@localhorst.tv>
Tue, 15 Jul 2025 18:19:14 +0000 (20:19 +0200)
committerDaniel Karbach <daniel.karbach@localhorst.tv>
Tue, 15 Jul 2025 18:19:14 +0000 (20:19 +0200)
app/Console/Commands/SyncStepLadder.php
app/Console/Commands/SyncStepLadderFull.php

index 07afe81c8a3f530672f4b2a324e0c576c7bfcce5..3deb06338c417ac81f1734740c374d3a7315a66f 100644 (file)
@@ -51,7 +51,7 @@ class SyncStepLadder extends Command {
                }
        }
 
-       private function syncEvent(Event $event) {
+       protected function syncEvent(Event $event) {
                $ladderSchedule = Http::get('https://alttpr.racing/api/v1/upcoming')->json();
                foreach ($ladderSchedule as $ladderEntry) {
                        try {
@@ -62,9 +62,9 @@ class SyncStepLadder extends Command {
                }
        }
 
-       private function syncSchedule(Event $event, $ladderEntry) {
+       protected function syncSchedule(Event $event, $ladderEntry) {
                $ext_id = 'stepladder:'.$ladderEntry['id'];
-               $episode = Episode::firstWhere('ext_id', '=', $ext_id);
+               $episode = Episode::query()->firstWhere('ext_id', '=', $ext_id);
                if (!$episode) {
                        $episode = new Episode();
                        $episode->ext_id = $ext_id;
@@ -73,12 +73,26 @@ class SyncStepLadder extends Command {
                $episode->event()->associate($event);
                $episode->stepLadderMode()->associate($mode);
                $episode->title = $mode->name;
-               $episode->start = Carbon::createFromTimestamp($ladderEntry['time']);
+               $episode->start = $this->getEntryTime($ladderEntry);
                $episode->estimate = 2 * 60 * 60;
                $episode->confirmed = true;
+
+               $pattern = '/_(AD|Flute|Inv|KD|MS|PB|ZW)/';
+               $modifiers = [];
+               if (preg_match_all($pattern, $episode->title, $matches)) {
+                       foreach ($matches[1] as $modifier) {
+                               $modifiers[] = $this->translateModifier($modifier);
+                       }
+                       $episode->comment = implode(', ', $modifiers);
+               }
+
                $episode->save();
        }
 
+       protected function getEntryTime($ladderEntry) {
+               return Carbon::createFromTimestamp($ladderEntry['time']);
+       }
+
        private function getMode($ladderEntry) {
                $ext_id = 'stepladder:'.$ladderEntry['mode'];
                $mode = StepLadderMode::firstWhere('ext_id', '=', $ext_id);
@@ -93,4 +107,23 @@ class SyncStepLadder extends Command {
                return $mode;
        }
 
+       private function translateModifier(string $mod): string {
+               switch ($mod) {
+                       case 'AD':
+                               return 'All Dungeons';
+                       case 'Inv':
+                               return 'Inverted';
+                       case 'KD':
+                               return 'Keydrop';
+                       case 'MS':
+                               return 'Mirror Scroll';
+                       case 'PB':
+                               return 'Pseudo Boots';
+                       case 'ZW':
+                               return 'Zelga Woods';
+                       default:
+                               return $mod;
+               }
+       }
+
 }
index 6cef974cd56ddba641bf22159221c2e6fc202ab9..7e2afd45dbd730b3678158de748bdd0eba014c8a 100644 (file)
@@ -11,7 +11,7 @@ use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Support\Facades\Http;
 
 
-class SyncStepLadderFull extends Command {
+class SyncStepLadderFull extends SyncStepLadder {
 
        /**
         * The name and signature of the console command.
@@ -28,30 +28,7 @@ class SyncStepLadderFull extends Command {
        protected $description = 'Synchronize complete Step Ladder schedule';
 
 
-       /**
-        * Execute the console command.
-        *
-        * @return int
-        */
-       public function handle() {
-               $events = Event::where('external_schedule', 'LIKE', 'stepladder')
-                       ->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) {
+       protected function syncEvent(Event $event) {
                $ladderSchedule = Http::get('https://alttpr.racing/api/v1/schedule')->json();
                foreach ($ladderSchedule as $ladderEntry) {
                        try {
@@ -62,35 +39,8 @@ class SyncStepLadderFull extends Command {
                }
        }
 
-       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->stepLadderMode()->associate($mode);
-               $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;
+       protected function getEntryTime($ladderEntry) {
+               return Carbon::createFromFormat('Y-m-d H:i:s', $ladderEntry['time'], 'America/Detroit')->setTimezone('UTC');
        }
 
 }