FFXIV_Lodestone_Handler/app/Services/LodestoneCacheService.php

81 lines
3.4 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);
$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);
$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);
$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);
$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;
}