CustomerController   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 57
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 1

Importance

Changes 0
Metric Value
wmc 6
c 0
b 0
f 0
lcom 0
cbo 1
dl 0
loc 57
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A createAction() 0 13 2
A createValidationMessage() 0 33 2
A addErrorFromField() 0 6 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Sylius\ShopApiPlugin\Controller\Customer;
6
7
use FOS\RestBundle\View\View;
8
use Sylius\Bundle\ResourceBundle\Controller\ResourceController;
9
use Sylius\ShopApiPlugin\View\ValidationErrorView;
10
use Symfony\Component\HttpFoundation\Request;
11
use Symfony\Component\HttpFoundation\Response;
12
13
final class CustomerController extends ResourceController
14
{
15
    public function createAction(Request $request): Response
16
    {
17
        $response = parent::createAction($request);
18
19
        if (Response::HTTP_BAD_REQUEST !== $response->getStatusCode()) {
20
            return $response;
21
        }
22
23
        return $this
24
            ->get('fos_rest.view_handler')
25
            ->handle(View::create($this->createValidationMessage($response->getContent()), Response::HTTP_BAD_REQUEST))
26
        ;
27
    }
28
29
    private function createValidationMessage(string $validationResults): ValidationErrorView
30
    {
31
        /** @var ValidationErrorView $errorMessage */
32
        $errorMessage = new ValidationErrorView();
33
34
        $errorMessage->code = Response::HTTP_BAD_REQUEST;
35
        $errorMessage->message = 'Validation failed';
36
37
        $parsedValidationResults = json_decode($validationResults, true);
38
39
        if (isset($parsedValidationResults['errors']['errors'])) {
40
            $errorMessage->errors['errors'] = $parsedValidationResults['errors']['errors'];
41
        }
42
43
        $childrenErrors = $parsedValidationResults['errors']['children'];
44
        $this->addErrorFromField($errorMessage, $childrenErrors, 'email');
45
        $this->addErrorFromField($errorMessage, $childrenErrors, 'firstName');
46
        $this->addErrorFromField($errorMessage, $childrenErrors, 'lastName');
47
        $this->addErrorFromField($errorMessage, $childrenErrors, 'phoneNumber');
48
        $this->addErrorFromField($errorMessage, $childrenErrors, 'subscribedToNewsletter');
49
        $this->addErrorFromField(
50
            $errorMessage,
51
            $childrenErrors['user']['children']['plainPassword']['children']['first'],
52
            'subscribedToNewsletter'
53
        );
54
        $this->addErrorFromField(
55
            $errorMessage,
56
            $childrenErrors['user']['children']['plainPassword']['children']['second'],
57
            'subscribedToNewsletter'
58
        );
59
60
        return $errorMessage;
61
    }
62
63
    private function addErrorFromField(ValidationErrorView $errorMessage, $errors, $field): void
64
    {
65
        if (isset($errors[$field]['errors'])) {
66
            $errorMessage->errors[$field] = $errors[$field]['errors'];
67
        }
68
    }
69
}
70