· 4 years ago · Sep 08, 2021, 05:54 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 if ($data !== null) {
53 return $data;
54 }
55 $data = DB::table('mytable')->where('key', $key)->first();
56 if ($data !== null) {
57 $this->cache->set($key, $data, 900);
58 return $data;
59 }
60 $this->logger->warning($key . ' is not found in database');
61 $data = $this->someAPI->get($key);
62 if ($data !== null) {
63 DB::table('mytable')->insert($data);
64 $this->logger->info($data . ' is written in database');
65 $this->cache->set($key, $data, 900);
66 return $data;
67 }
68 $this->logger->warning($key . ' API did not return a value');
69 throw new Exception('Invalid key');
70 }
71}
72