Select Git revision
RequestCacheInfoResolver.php
-
Grzegorz Rola authoredGrzegorz Rola authored
RequestCacheInfoResolver.php 3.28 KiB
<?php
namespace WPDesk\ApiClient\Client;
use WPDesk\Cache\CacheInfoResolver;
use WPDesk\Cache\HowToCache;
use WPDesk\SaasPlatformClient\Request\AuthRequest;
use WPDesk\SaasPlatformClient\Request\BasicRequest;
use WPDesk\SaasPlatformClient\Request\Request;
use WPDesk\SaasPlatformClient\Request\ShippingServicesSettings\PutSettingsRequest;
use WPDesk\SaasPlatformClient\Request\Status\GetStatusRequest;
use WPDesk\SaasPlatformClient\Response\ApiResponse;
use WPDesk\SaasPlatformClient\Response\RawResponse;
class RequestCacheInfoResolver implements CacheInfoResolver
{
const DEFAULT_CACHE_TTL = 86400; //24 hours
const CACHE_TTL_ONE_MINUTE = 60;
const OPTION_FS_SAAS_PLATFORM_VERSION_HASH = 'fs-saas-platform-version-hash';
/**
*
* @param Request $request
*
* @return bool
*/
private function prepareCacheKey($request)
{
return md5($request->getEndpoint());
}
/**
*
* @param Request $request
*
* @return bool
*/
public function isSupported($request)
{
if ($request instanceof BasicRequest) {
return true;
}
return false;
}
/**
*
* @param Request $request
*
* @return bool
*/
public function shouldCache($request)
{
if ($request instanceof ConnectKeyInfoRequest) {
return false;
}
if ($request instanceof GetStatusRequest) {
return false;
}
if ($request instanceof BasicRequest) {
if ('GET' === $request->getMethod()) {
return true;
}
}
return false;
}
/**
*
* @param Request $request
*
* @return HowToCache
*/
public function prepareHowToCache($request)
{
$howToCache = new HowToCache($this->prepareCacheKey($request), self::DEFAULT_CACHE_TTL);
return $howToCache;
}
/**
* @param ApiResponse $response
*
* @return bool
*/
private function isPlatformVersionFromResponseChanged(ApiResponse $response)
{
$stored_hash = get_option(self::OPTION_FS_SAAS_PLATFORM_VERSION_HASH, '');
if ($stored_hash !== $response->getPlatformVersionHash()) {
return true;
}
return false;
}
/**
* @param ApiResponse $response
*/
private function storePlatformVersionHashFromResponse(ApiResponse $response)
{
update_option(self::OPTION_FS_SAAS_PLATFORM_VERSION_HASH, $response->getPlatformVersionHash());
}
/**
*
* @param Request $request
* @param mixed $item
*
* @return bool
*/
public function shouldClearCache($request, $item)
{
if ($request instanceof PutSettingsRequest) {
return true;
}
if ($item instanceof ApiResponse && $this->isPlatformVersionFromResponseChanged($item)) {
$this->storePlatformVersionHashFromResponse($item);
return true;
}
return false;
}
/**
*
* @param Request $request
* @param mixed $item
*
* @return string[]
*/
public function shouldClearKeys($request, $item)
{
if ('GET' !== $request->getMethod()) {
return [$this->prepareCacheKey($request)];
}
return [];
}
}