where('lodestoneId', $id)->first(); if ($character !== null && $character->updated_at > $this->getCacheFreshTime()) return $character; $fetchedCharacter = $lodestoneApiService->getCharacterById($id); if ($fetchedCharacter === null) { if ($character === null) return abort(502); return $character; } $character = LodestoneCache::updateOrCreate([ 'type' => LodestoneCacheType::character, 'lodestoneId' => $fetchedCharacter->Character->ID, 'server' => $fetchedCharacter->Character->Server, 'name' => $fetchedCharacter->Character->Name, ],[ 'content' => $fetchedCharacter ]); return $character; } public function getCharacterByName($server, $name, $lodestoneApiService) { $character = LodestoneCache::where('type', LodestoneCacheType::character)->where('server', $server)->where('name', $name)->first(); if ($character !== null && $character->updated_at > $this->getCacheFreshTime()) return $character; $fetchedCharacter = $lodestoneApiService->getCharacterByName($server, $name); if ($fetchedCharacter === null) { if ($character === null) return abort(502); return $character; } $character = LodestoneCache::updateOrCreate([ 'type' => LodestoneCacheType::character, 'lodestoneId' => $fetchedCharacter->Character->ID, 'server' => $fetchedCharacter->Character->Server, 'name' => $fetchedCharacter->Character->Name, ],[ 'content' => $fetchedCharacter ]); return $character; } public function getFreeCompanyById($id, $lodestoneApiService) { $freeCompany = LodestoneCache::where('type', LodestoneCacheType::freeCompany)->where('lodestoneId', $id)->first(); if ($freeCompany !== null && $freeCompany->updated_at > $this->getCacheFreshTime()) return $freeCompany; $fetchedFreeCompany = $lodestoneApiService->getFreeCompanyById($id); if ($fetchedFreeCompany === null) { if ($freeCompany === null) return abort(502); return $freeCompany; } $freeCompany = LodestoneCache::updateOrCreate([ 'type' => LodestoneCacheType::freeCompany, 'lodestoneId' => $fetchedFreeCompany->FreeCompany->ID, 'server' => $fetchedFreeCompany->FreeCompany->Server, 'name' => $fetchedFreeCompany->FreeCompany->Name, ],[ 'content' => $fetchedFreeCompany ]); return $freeCompany; } public function getFreeCompanyByName($server, $name, $lodestoneApiService) { $freeCompany = LodestoneCache::where('type', LodestoneCacheType::freeCompany)->where('server', $server)->where('name', $name)->first(); if ($freeCompany !== null && $freeCompany->updated_at > $this->getCacheFreshTime()) return $freeCompany; $fetchedFreeCompany = $lodestoneApiService->getFreeCompanyByName($server, $name); if ($fetchedFreeCompany === null) { if ($freeCompany === null) return abort(502); return $freeCompany; } $freeCompany = LodestoneCache::updateOrCreate([ 'type' => LodestoneCacheType::freeCompany, 'lodestoneId' => $fetchedFreeCompany->FreeCompany->ID, 'server' => $fetchedFreeCompany->FreeCompany->Server, 'name' => $fetchedFreeCompany->FreeCompany->Name, ],[ 'content' => $fetchedFreeCompany ]); return $freeCompany; } private function getCacheFreshTime() { return Carbon::now()->subMinutes(config('chaosapi.cachetime', 60)); } } abstract class LodestoneCacheType { public const character = 0; public const freeCompany = 1; }