Passed
Push — master ( 165425...e22481 )
by Mattia
04:28
created

BaseApiController::cache()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 1
dl 0
loc 3
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Minepic\Http\Controllers\Api;
6
7
use Illuminate\Contracts\Cache\Repository as CacheRepository;
8
use Illuminate\Contracts\Events\Dispatcher;
9
use Illuminate\Http\Request;
10
use Illuminate\Http\Response;
11
use Laravel\Lumen\Http\ResponseFactory;
12
use Laravel\Lumen\Routing\Controller as BaseController;
13
use Minepic\Events\Account\AccountImageServedEvent;
14
use Minepic\Image\Rendering;
15
use Minepic\Resolvers\UsernameResolver;
16
use Minepic\Resolvers\UuidResolver;
17
18
abstract class BaseApiController extends BaseController
19
{
20
    /**
21
     * @var UuidResolver
22
     */
23
    protected UuidResolver $uuidResolver;
24
    /**
25
     * @var ResponseFactory
26
     */
27
    protected ResponseFactory $responseFactory;
28
    /**
29
     * @var UsernameResolver
30
     */
31
    protected UsernameResolver $usernameResolver;
32
    /**
33
     * @var Rendering
34
     */
35
    protected Rendering $rendering;
36
    /**
37
     * @var Dispatcher
38
     */
39
    protected Dispatcher $eventDispatcher;
40
41
    /**
42
     * Api constructor.
43
     *
44
     * @param UuidResolver     $uuidResolver     Minepic Core Instance
45
     * @param ResponseFactory  $responseFactory  Response Factory
46
     * @param UsernameResolver $usernameResolver
47
     * @param Rendering        $rendering
48
     * @param Dispatcher       $eventDispatcher
49
     */
50
    public function __construct(
51
        UuidResolver $uuidResolver,
52
        ResponseFactory $responseFactory,
53
        UsernameResolver $usernameResolver,
54
        Rendering $rendering,
55
        Dispatcher $eventDispatcher
56
    ) {
57
        $this->uuidResolver = $uuidResolver;
58
        $this->responseFactory = $responseFactory;
59
        $this->usernameResolver = $usernameResolver;
60
        $this->rendering = $rendering;
61
        $this->eventDispatcher = $eventDispatcher;
62
    }
63
64
    /**
65
     * @param Request $request Injected Request
66
     * @param string  $uuid
67
     * @param int     $size    Avatar size User UUID or name
68
     *
69
     * @return Response
70
     */
71
    abstract public function serveUuid(Request $request, string $uuid, $size = 0): Response;
72
73
    /**
74
     * Serve default skin section.
75
     *
76
     * @param int $size
77
     *
78
     * @return Response
79
     */
80
    abstract public function serveDefault($size = 0): Response;
81
82
    /**
83
     * @param Request $request
84
     * @param string  $username
85
     * @param int     $size
86
     *
87
     * @throws \Throwable
88
     *
89
     * @return Response
90
     */
91
    public function serveUsername(Request $request, string $username, $size = 0): Response
92
    {
93
        $uuid = $this->usernameResolver->resolve($username);
94
95
        return $uuid ? $this->serveUuid($request, $uuid, $size) : $this->serveDefault($size);
96
    }
97
98
    /**
99
     * @param string $image
100
     *
101
     * @return Response
102
     */
103
    public function pngResponse(string $image): Response
104
    {
105
        return $this->responseFactory->make($image, Response::HTTP_OK, ['Content-Type' => 'image/png']);
106
    }
107
108
    /**
109
     * @return void
110
     */
111
    protected function dispatchAccountImageServedEvent(): void
112
    {
113
        $this->eventDispatcher->dispatch(new AccountImageServedEvent($this->uuidResolver->getAccount()));
114
    }
115
116
    /**
117
     * @return CacheRepository
118
     */
119
    protected function cache(): CacheRepository
120
    {
121
        return \Cache::driver('file');
122
    }
123
}
124