Skip to content

Commit 1f46a30

Browse files
committed
ISSUE-345: snake to camel config
1 parent b74bb83 commit 1f46a30

File tree

5 files changed

+32
-13
lines changed

5 files changed

+32
-13
lines changed

config/services/normalizers.yml

+8
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,14 @@ services:
44
autoconfigure: true
55
public: false
66

7+
Symfony\Component\Serializer\NameConverter\CamelCaseToSnakeCaseNameConverter: ~
8+
9+
Symfony\Component\Serializer\Normalizer\ObjectNormalizer:
10+
arguments:
11+
$classMetadataFactory: '@?serializer.mapping.class_metadata_factory'
12+
$nameConverter: '@Symfony\Component\Serializer\NameConverter\CamelCaseToSnakeCaseNameConverter'
13+
# $propertyTypeExtractor: '@?serializer.property_type_extractor'
14+
715
PhpList\RestBundle\Serializer\SubscriberNormalizer:
816
tags: [ 'serializer.normalizer' ]
917
autowire: true

src/Entity/SubscriberRequest.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ class SubscriberRequest implements RequestInterface
1515
public string $email;
1616

1717
#[Assert\Type(type: 'bool')]
18-
public ?bool $request_confirmation = null;
18+
public ?bool $requestConfirmation = null;
1919

2020
#[Assert\Type(type: 'bool')]
21-
public ?bool $html_email = null;
21+
public ?bool $htmlEmail = null;
2222
}

src/Service/Manager/SubscriberManager.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ public function createSubscriber(SubscriberRequest $subscriberRequest): Subscrib
2121
{
2222
$subscriber = new Subscriber();
2323
$subscriber->setEmail($subscriberRequest->email);
24-
$confirmed = (bool)$subscriberRequest->request_confirmation;
24+
$confirmed = (bool)$subscriberRequest->requestConfirmation;
2525
$subscriber->setConfirmed(!$confirmed);
2626
$subscriber->setBlacklisted(false);
27-
$subscriber->setHtmlEmail((bool)$subscriberRequest->html_email);
27+
$subscriber->setHtmlEmail((bool)$subscriberRequest->htmlEmail);
2828
$subscriber->setDisabled(false);
2929

3030
$this->subscriberRepository->save($subscriber);

src/Validator/RequestValidator.php

+14-3
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,15 @@
99
use Symfony\Component\HttpKernel\Exception\UnprocessableEntityHttpException;
1010
use Symfony\Component\Serializer\SerializerInterface;
1111
use Symfony\Component\Validator\Validator\ValidatorInterface;
12-
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
1312
use Throwable;
1413

1514
class RequestValidator
1615
{
1716
public function __construct(
1817
private readonly SerializerInterface $serializer,
1918
private readonly ValidatorInterface $validator
20-
) {}
19+
) {
20+
}
2121

2222
public function validate(Request $request, string $dtoClass): RequestInterface
2323
{
@@ -33,7 +33,18 @@ public function validate(Request $request, string $dtoClass): RequestInterface
3333
$errors = $this->validator->validate($dto);
3434

3535
if (count($errors) > 0) {
36-
throw new UnprocessableEntityHttpException((string) $errors);
36+
$lines = [];
37+
foreach ($errors as $violation) {
38+
$lines[] = sprintf(
39+
'%s: %s',
40+
$violation->getPropertyPath(),
41+
$violation->getMessage()
42+
);
43+
}
44+
45+
$message = implode("\n", $lines);
46+
47+
throw new UnprocessableEntityHttpException($message);
3748
}
3849

3950
return $dto;

tests/Integration/Controller/SubscriberControllerTest.php

+6-6
Original file line numberDiff line numberDiff line change
@@ -106,10 +106,10 @@ public static function invalidSubscriberDataProvider(): array
106106
'email is an empty string' => [['email' => '']],
107107
'email is invalid string' => [['email' => 'coffee and cigarettes']],
108108
'email as boolean' => [['email' => true]],
109-
'html_email as integer' => [['email' => '[email protected]', 'html_email' => 1]],
110-
'html_email as string' => [['email' => '[email protected]', 'html_email' => 'yes']],
111-
'request_confirmation as string' => [['email' => '[email protected]', 'request_confirmation' => 'needed']],
112-
'disabled as string' => [['email' => '[email protected]', 'request_confirmation' => 1]],
109+
'html_email as integer' => [['email' => '[email protected]', 'htmlEmail' => 1]],
110+
'html_email as string' => [['email' => '[email protected]', 'htmlEmail' => 'yes']],
111+
'request_confirmation as string' => [['email' => '[email protected]', 'requestConfirmation' => 'needed']],
112+
'disabled as string' => [['email' => '[email protected]', 'requestConfirmation' => 1]],
113113
];
114114
}
115115

@@ -129,9 +129,9 @@ public function testPostSubscribersWithValidSessionKeyAssignsProvidedSubscriberD
129129
$email = '[email protected]';
130130
$jsonData = [
131131
'email' => $email,
132-
'request_confirmation' => true,
132+
'requestConfirmation' => true,
133133
'blacklisted' => true,
134-
'html_email' => true,
134+
'htmlEmail' => true,
135135
'disabled' => true,
136136
];
137137

0 commit comments

Comments
 (0)