UserController   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 89
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 4

Test Coverage

Coverage 72.5%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 6
c 1
b 0
f 0
lcom 1
cbo 4
dl 0
loc 89
ccs 29
cts 40
cp 0.725
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A listAction() 0 15 2
A getAction() 0 20 2
A updateAction() 0 16 1
A deleteAction() 0 11 1
1
<?php
2
3
/*
4
 * This file is part of the "Kata 1" package.
5
 *
6
 * Copyright (c) Daniel González
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 *
11
 * @author Daniel González <[email protected]>
12
 */
13
14
namespace App\Controller\Api;
15
16
use Component\Http\JsonResponse;
17
use Component\Http\Request;
18
use Component\Http\Response;
19
20
use App\Controller\AppController;
21
use App\Model\User;
22
use App\Repository\UserRepository;
23
24
/**
25
 * UserController.
26
 */
27
class UserController extends AppController
28
{
29
    /**
30
     * @return JsonResponse
31
     */
32 4
    public function listAction(Request $request)
33
    {
34 4
        $users = $this->app['app.repository.user']->findAll();
35 4
        $data = ['items' => [], 'total' => count($users)];
36
        /** @var User $user */
37 4
        foreach ($users as $user) {
38 4
            $data['items'][] = [
39 4
                'name' => $user->getName(),
40 4
                'roles' => $user->getRoles(),
41 4
                'links' => ['rel' => 'self', 'href' => sprintf('/api/users/%s', $user->getName())],
42
            ];
43 4
        }
44
45 4
        return $this->app['api.response.negociator']->negociate($request, $data);
46
    }
47
48
    /**
49
     * @param Request $request
50
     * @param array   $parameters
51
     *
52
     * @return JsonResponse
53
     */
54 1
    public function getAction(Request $request, $parameters)
55
    {
56 1
        $user = $this->app['app.repository.user']->findByName($parameters['name']);
57 1
        if (!$user) {
58
            return $this->app['api.response.negociator']->negociate(
59
                $request,
60
                ['error' => 'not found'],
61
                Response::HTTP_NOT_FOUND
62
            );
63
        }
64
65 1
        return $this->app['api.response.negociator']->negociate(
66 1
            $request,
67
            [
68 1
                'name' => $user->getName(),
69 1
                'roles' => $user->getRoles(),
70 1
                'links' => ['rel' => 'self', 'href' => sprintf('/api/users/%s', $user->getName())],
71
            ]
72 1
        );
73
    }
74
75
    /**
76
     * @param Request $request
77
     * @param array   $parameters
78
     *
79
     * @return JsonResponse
80
     */
81 2
    public function updateAction(Request $request, $parameters)
82
    {
83
        /** @var UserRepository $repository */
84 2
        $repository = $this->app['app.repository.user'];
85 2
        $user = new User($parameters['name'], $request->get('post', 'roles', []));
86 2
        $repository->updateUser($user, $request->get('post', 'password'));
87
88 2
        return $this->app['api.response.negociator']->negociate(
89 2
            $request,
90
            [
91 2
                'name' => $user->getName(),
92 2
                'roles' => $user->getRoles(),
93 2
                'links' => ['rel' => 'self', 'href' => sprintf('/api/users/%s', $user->getName())],
94
            ]
95 2
        );
96
    }
97
98
    /**
99
     * @param Request $request
100
     * @param array   $parameters
101
     *
102
     * @return JsonResponse
103
     */
104
    public function deleteAction(Request $request, $parameters)
105
    {
106
        /** @var UserRepository $repository */
107
        $repository = $this->app['app.repository.user'];
108
        $repository->removeUser($parameters['name']);
109
110
        return $this->app['api.response.negociator']->negociate(
111
            $request,
112
            []
113
        );
114
    }
115
}
116