BaseApiController::cache()   A
last analyzed

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
     * Api constructor.
22
     *
23
     * @param UuidResolver     $uuidResolver     Minepic Core Instance
24
     * @param ResponseFactory  $responseFactory  Response Factory
25
     */
26
    public function __construct(
27
        protected UuidResolver $uuidResolver,
28
        protected ResponseFactory $responseFactory,
29
        protected UsernameResolver $usernameResolver,
30
        protected Rendering $rendering,
31
        protected Dispatcher $eventDispatcher
32
    ) {
33
    }
34
35
    /**
36
     * @param Request $request Injected Request
37
     * @param int     $size    Avatar size User UUID or name
38
     */
39
    abstract public function serveUuid(Request $request, string $uuid, $size = 0): Response;
40
41
    /**
42
     * Serve default skin section.
43
     *
44
     * @param int $size
45
     */
46
    abstract public function serveDefault($size = 0): Response;
47
48
    /**
49
     * @param int     $size
50
     *
51
     * @throws \Throwable
52
     */
53
    public function serveUsername(Request $request, string $username, $size = 0): Response
54
    {
55
        $uuid = $this->usernameResolver->resolve($username);
56
57
        return $uuid ? $this->serveUuid($request, $uuid, $size) : $this->serveDefault($size);
58
    }
59
60
    public function pngResponse(string $image): Response
61
    {
62
        return $this->responseFactory->make($image, Response::HTTP_OK, ['Content-Type' => 'image/png']);
63
    }
64
65
    protected function dispatchAccountImageServedEvent(): void
66
    {
67
        $this->eventDispatcher->dispatch(new AccountImageServedEvent($this->uuidResolver->getAccount()));
68
    }
69
70
    protected function cache(): CacheRepository
71
    {
72
        return \Cache::driver('file');
73
    }
74
}
75