· 4 years ago · Sep 08, 2021, 08:32 PM
1<?php
2
3namespace App\Http\Controllers;
4
5use Exception;
6use Illuminate\Database\Eloquent\Model;
7use Illuminate\Database\Query\Builder;
8use Illuminate\Support\Facades\DB;
9use Psr\Log\LoggerInterface;
10use Psr\SimpleCache\CacheInterface;
11use Psr\SimpleCache\InvalidArgumentException;
12use SomeAPInterface;
13
14class SomeController extends Controller
15{
16 /**
17 * @var LoggerInterface
18 */
19 private LoggerInterface $logger;
20
21 /**
22 * @var CacheInterface
23 */
24 private CacheInterface $cache;
25
26 /**
27 * @var SomeAPInterface
28 */
29 private SomeAPInterface $someAPI;
30
31 /**
32 * SomeController constructor.
33 * @param LoggerInterface $logger
34 * @param CacheInterface $cache
35 * @param SomeAPInterface $someAPI
36 */
37 public function __construct(LoggerInterface $logger, CacheInterface $cache, SomeAPInterface $someAPI)
38 {
39 $this->logger = $logger;
40 $this->cache = $cache;
41 $this->someApi = $someAPI;
42 }
43
44 /**
45 * @param $key
46 * @return Model|Builder|mixed|object
47 * @throws InvalidArgumentException
48 */
49 public function GetData($key)
50 {
51 $data = $this->cache->get($key);
52
53 if ($data !== null) {
54 return $data;
55 }
56
57 $data = DB::table('mytable')->where('key', $key)->first();
58 if ($data !== null) {
59 $this->cache->set($key, $data, 900);
60 return $data;
61 }
62
63 $this->logger->debug($key . ' is not found in database');
64 $data = $this->someAPI->get($key);
65 if ($data !== null) {
66 DB::table('mytable')->insert($data);
67 $this->logger->debug($data . ' is written in database');
68 $this->cache->set($key, $data, 900);
69 return $data;
70 }
71
72 $this->logger->warning($key . ' API did not return a value');
73 throw new Exception('Invalid key');
74 }
75}