97 lines
4.0 KiB
PHP
97 lines
4.0 KiB
PHP
<?php
|
|
|
|
|
|
namespace App\Services;
|
|
|
|
|
|
use App\LodestoneCache;
|
|
use Carbon\Carbon;
|
|
|
|
class LodestoneCacheService
|
|
{
|
|
public function getCharacterById($id, $lodestoneApiService) {
|
|
$character = LodestoneCache::where('type', LodestoneCacheType::character)->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;
|
|
}
|