Completed
Push — master ( 30ccda...71f35d )
by Tarmo
01:20 queued 28s
created

DeleteUserController   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 31
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
eloc 14
dl 0
loc 31
ccs 5
cts 5
cp 1
rs 10
c 0
b 0
f 0
wmc 3

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __invoke() 0 19 2
A __construct() 0 3 1
1
<?php
2
declare(strict_types = 1);
3
/**
4
 * /src/Controller/v1/User/DeleteUserController.php
5
 *
6
 * @author TLe, Tarmo Leppänen <[email protected]>
7
 */
8
9
namespace App\Controller\v1\User;
10
11
use App\Entity\User;
12
use App\Resource\UserResource;
13
use App\Rest\Controller;
14
use App\Rest\Traits\Methods;
15
use App\Security\RolesService;
16
use OpenApi\Annotations as OA;
17
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
18
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
19
use Symfony\Component\HttpFoundation\Request;
20
use Symfony\Component\HttpFoundation\Response;
21
use Symfony\Component\HttpKernel\Exception\HttpException;
22
use Symfony\Component\Routing\Annotation\Route;
23
use Throwable;
24
25
/**
26
 * Class DeleteUserController
27
 *
28
 * @OA\Tag(name="User Management")
29
 *
30
 * @package App\Controller\v1\User
31
 * @author TLe, Tarmo Leppänen <[email protected]>
32
 */
33
class DeleteUserController extends Controller
34
{
35
    use Methods\DeleteMethod;
36
37 93
    public function __construct(
38
        protected UserResource $resource,
39
    ) {
40
    }
41
42
    /**
43
     * @throws Throwable
44
     */
45 5
    #[Route(
46
        path: '/v1/user/{requestUser}',
47
        requirements: [
48
            'requestUser' => '%app.uuid_v1_regex%',
49
        ],
50
        methods: [Request::METHOD_DELETE],
51
    )]
52
    #[IsGranted(RolesService::ROLE_ROOT)]
53
    #[ParamConverter(
54
        data: 'requestUser',
55
        class: UserResource::class,
56
    )]
57
    public function __invoke(Request $request, User $requestUser, User $loggedInUser): Response
58
    {
59 5
        if ($loggedInUser === $requestUser) {
60 2
            throw new HttpException(Response::HTTP_BAD_REQUEST, 'You cannot remove yourself...');
61
        }
62
63 3
        return $this->deleteMethod($request, $requestUser->getId());
64
    }
65
}
66