Advertisement
Guest User

Untitled

a guest
Jan 24th, 2019
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.87 KB | None | 0 0
  1. <?php
  2. namespace src\Data;
  3.  
  4. use DateTime;
  5. use src\Data\ProviderInterface;
  6.  
  7. class CachedDataProvider implements ProviderInterface
  8. {
  9.     private $cache;
  10.     private $provider;
  11.  
  12.     /**
  13.      * @param CacheItemPoolInterface $cache
  14.      * @param ProviderInterface $provider
  15.      */
  16.     public function __construct(
  17.         ProviderInterface $provider,
  18.         CacheItemPoolInterface $cache)
  19.     {
  20.         $this->cache = $cache;
  21.         $this->provider = $provider;
  22.     }
  23.    
  24.     /**
  25.      * @param array $request
  26.      *
  27.      * @return array
  28.      */
  29.     public function get(array $request)
  30.     {
  31.         $cacheKey = $this->getCacheKey($request);
  32.         $cacheItem = $this->cache->getItem($cacheKey);
  33.  
  34.         if ($cacheItem->isHit()) {
  35.             return $cacheItem->get();
  36.         }
  37.  
  38.         $result = $provider->get($request);
  39.  
  40.         $cacheItem
  41.             ->set($result)
  42.             ->expiresAt(
  43.                 (new DateTime())->modify('+1 day')
  44.             );
  45.  
  46.         return $result;
  47.     }
  48.  
  49.     /**
  50.      * @param array $input
  51.      *
  52.      * @return string
  53.      */
  54.     private function getCacheKey(array $request)
  55.     {
  56.         return json_encode($request);
  57.     }
  58. }
  59.  
  60. <?php
  61. namespace src\Integration;
  62.  
  63. use src\Data\ProviderInterface;
  64.  
  65. class DataProvider implements ProviderInterface
  66. {
  67.     private $host;
  68.     private $user;
  69.     private $password;
  70.  
  71.     /**
  72.      * @param string $host
  73.      * @param string $user
  74.      * @param string $password
  75.      */
  76.     public function __construct($host, $user, $password)
  77.     {
  78.         $this->host = $host;
  79.         $this->user = $user;
  80.         $this->password = $password;
  81.     }
  82.    
  83.     /**
  84.      * @param array $input
  85.      *
  86.      * @return array
  87.      */
  88.     public function get(array $request)
  89.     {
  90.         // returns a response from external service
  91.     }
  92. }
  93.  
  94. <?php
  95. namespace src\Data;
  96.  
  97. use Exception;
  98. use Psr\Log\LoggerInterface;
  99. use src\Data\ProviderInterface;
  100.  
  101. class LoggedDataProvider implements ProviderInterface
  102. {
  103.     private $provider;
  104.     private $logger;
  105.  
  106.     /**
  107.      * @param ProviderInterface $provider
  108.      * @param LoggerInterface   $logger
  109.      */
  110.     public function __construct(
  111.         ProviderInterface $provider,
  112.         LoggerInterface $logger)
  113.     {
  114.         $this->provider = $provider;
  115.         $this->logger = $logger;
  116.     }
  117.  
  118.     /**
  119.      * @param array $request
  120.      *
  121.      * @return array
  122.      */
  123.     public function get(array $request)
  124.     {
  125.         try {
  126.             $result = $provider->get($request);
  127.  
  128.             return $result;
  129.         } catch (Exception $e) {
  130.             $this->logger->critical('Error');
  131.         }
  132.  
  133.         return [];
  134.     }
  135.  
  136.  
  137. }
  138.  
  139. <?php
  140. namespace src\Data;
  141.  
  142. interface ProviderInterface {
  143.    
  144.     /**
  145.      * @param array $request
  146.      *
  147.      * @return array
  148.      */
  149.     public function get(array $request);
  150. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement