Passed
Push — master ( 9aa048...898b5e )
by Mattia
04:05
created

BaseApiController   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 89
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 5
eloc 13
dl 0
loc 89
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A pngResponse() 0 3 1
A serveUsername() 0 5 2
A dispatchAccountImageServedEvent() 0 3 1
A __construct() 0 10 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Minepic\Http\Controllers\Api;
6
7
use Illuminate\Http\Request;
8
use Illuminate\Http\Response;
9
use Laravel\Lumen\Http\ResponseFactory;
10
use Laravel\Lumen\Routing\Controller as BaseController;
11
use Minepic\Events\Account\AccountImageServedEvent;
12
use Minepic\Image\Rendering;
13
use Minepic\Resolvers\UsernameResolver;
14
use Minepic\Resolvers\UuidResolver;
15
16
/**
17
 * Class BaseApiController.
18
 */
19
abstract class BaseApiController extends BaseController
20
{
21
    /**
22
     * @var UuidResolver
23
     */
24
    protected UuidResolver $uuidResolver;
25
    /**
26
     * @var ResponseFactory
27
     */
28
    protected ResponseFactory $responseFactory;
29
    /**
30
     * @var UsernameResolver
31
     */
32
    protected UsernameResolver $usernameResolver;
33
    /**
34
     * @var Rendering
35
     */
36
    protected Rendering $rendering;
37
38
    /**
39
     * Api constructor.
40
     *
41
     * @param UuidResolver     $uuidResolver     Minepic Core Instance
42
     * @param ResponseFactory  $responseFactory  Response Factory
43
     * @param UsernameResolver $usernameResolver
44
     * @param Rendering        $rendering
45
     */
46
    public function __construct(
47
        UuidResolver $uuidResolver,
48
        ResponseFactory $responseFactory,
49
        UsernameResolver $usernameResolver,
50
        Rendering $rendering
51
    ) {
52
        $this->uuidResolver = $uuidResolver;
53
        $this->responseFactory = $responseFactory;
54
        $this->usernameResolver = $usernameResolver;
55
        $this->rendering = $rendering;
56
    }
57
58
    /**
59
     * @param Request $request Injected Request
60
     * @param string  $uuid
61
     * @param int     $size    Avatar size User UUID or name
62
     *
63
     * @return Response
64
     */
65
    abstract public function serveUuid(Request $request, string $uuid, $size = 0): Response;
66
67
    /**
68
     * Serve default skin section.
69
     *
70
     * @param int $size
71
     *
72
     * @return Response
73
     */
74
    abstract public function serveDefault($size = 0): Response;
75
76
    /**
77
     * @param Request $request
78
     * @param string  $username
79
     * @param int     $size
80
     *
81
     * @throws \Throwable
82
     *
83
     * @return Response
84
     */
85
    public function serveUsername(Request $request, string $username, $size = 0): Response
86
    {
87
        $uuid = $this->usernameResolver->resolve($username);
88
89
        return $uuid ? $this->serveUuid($request, $uuid, $size) : $this->serveDefault($size);
90
    }
91
92
    /**
93
     * @param string $image
94
     *
95
     * @return Response
96
     */
97
    public function pngResponse(string $image): Response
98
    {
99
        return $this->responseFactory->make($image, Response::HTTP_OK, ['Content-Type' => 'image/png']);
100
    }
101
102
    /**
103
     * @return void
104
     */
105
    protected function dispatchAccountImageServedEvent(): void
106
    {
107
        \Event::dispatch(new AccountImageServedEvent($this->uuidResolver->getAccount()));
0 ignored issues
show
Bug introduced by
The method dispatch() does not exist on Event. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

107
        \Event::/** @scrutinizer ignore-call */ 
108
                dispatch(new AccountImageServedEvent($this->uuidResolver->getAccount()));

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
108
    }
109
}
110