}
}
- 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 {
}
}
- 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;
$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);
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;
+ }
+ }
+
}
use Illuminate\Support\Facades\Http;
-class SyncStepLadderFull extends Command {
+class SyncStepLadderFull extends SyncStepLadder {
/**
* The name and signature of the console 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 {
}
}
- 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');
}
}