fix(service): make api endpoints configurable
This commit is contained in:
parent
d6e56eed78
commit
1266195e24
@ -6,7 +6,9 @@
|
|||||||
parameters:
|
parameters:
|
||||||
list.page.size: 24
|
list.page.size: 24
|
||||||
list.page.max_visible_pages: 3
|
list.page.max_visible_pages: 3
|
||||||
|
brilo.api.comments: 'https://jsonplaceholder.typicode.com/comments'
|
||||||
|
brilo.api.posts: 'https://jsonplaceholder.typicode.com/posts'
|
||||||
|
brilo.api.users: 'https://jsonplaceholder.typicode.com/users'
|
||||||
services:
|
services:
|
||||||
# default configuration for services in *this* file
|
# default configuration for services in *this* file
|
||||||
_defaults:
|
_defaults:
|
||||||
@ -31,5 +33,17 @@ services:
|
|||||||
$pageSize: '%list.page.size%'
|
$pageSize: '%list.page.size%'
|
||||||
$maxVisiblePages: '%list.page.max_visible_pages%'
|
$maxVisiblePages: '%list.page.max_visible_pages%'
|
||||||
|
|
||||||
|
App\Service\Remote\BriloApiComments:
|
||||||
|
arguments:
|
||||||
|
$url: '%brilo.api.comments%'
|
||||||
|
|
||||||
|
App\Service\Remote\BriloApiPosts:
|
||||||
|
arguments:
|
||||||
|
$url: '%brilo.api.posts%'
|
||||||
|
|
||||||
|
App\Service\Remote\BriloApiUsers:
|
||||||
|
arguments:
|
||||||
|
$url: '%brilo.api.users%'
|
||||||
|
|
||||||
# add more service definitions when explicit configuration is needed
|
# add more service definitions when explicit configuration is needed
|
||||||
# please note that last definitions always *replace* previous ones
|
# please note that last definitions always *replace* previous ones
|
||||||
|
@ -6,9 +6,15 @@ services:
|
|||||||
App\Service\Remote\BriloApiUsers:
|
App\Service\Remote\BriloApiUsers:
|
||||||
public: true
|
public: true
|
||||||
autowire: true
|
autowire: true
|
||||||
|
arguments:
|
||||||
|
$url: '%brilo.api.users%'
|
||||||
App\Service\Remote\BriloApiComments:
|
App\Service\Remote\BriloApiComments:
|
||||||
public: true
|
public: true
|
||||||
autowire: true
|
autowire: true
|
||||||
|
arguments:
|
||||||
|
$url: '%brilo.api.comments%'
|
||||||
App\Service\Remote\BriloApiPosts:
|
App\Service\Remote\BriloApiPosts:
|
||||||
public: true
|
public: true
|
||||||
autowire: true
|
autowire: true
|
||||||
|
arguments:
|
||||||
|
$url: '%brilo.api.posts%'
|
||||||
|
@ -18,6 +18,7 @@ class BriloApiComments
|
|||||||
protected readonly HttpClientInterface $httpClient,
|
protected readonly HttpClientInterface $httpClient,
|
||||||
protected readonly LoggerInterface $logger,
|
protected readonly LoggerInterface $logger,
|
||||||
protected readonly SerializerInterface $serializer,
|
protected readonly SerializerInterface $serializer,
|
||||||
|
protected readonly string $url,
|
||||||
protected readonly int $retryCount = 3,
|
protected readonly int $retryCount = 3,
|
||||||
protected readonly int $sleepTimeS = 1,
|
protected readonly int $sleepTimeS = 1,
|
||||||
) {
|
) {
|
||||||
@ -30,6 +31,6 @@ class BriloApiComments
|
|||||||
*/
|
*/
|
||||||
public function getComments(): array
|
public function getComments(): array
|
||||||
{
|
{
|
||||||
return $this->fetchApiResponse('https://jsonplaceholder.typicode.com/comments', Comment::class);
|
return $this->fetchApiResponse($this->url, Comment::class);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,8 @@ namespace App\Service\Remote;
|
|||||||
use App\Entity\Remote\Brilo\Users\User;
|
use App\Entity\Remote\Brilo\Users\User;
|
||||||
use Psr\Log\LoggerInterface;
|
use Psr\Log\LoggerInterface;
|
||||||
use Symfony\Component\HttpClient\Exception\TransportException;
|
use Symfony\Component\HttpClient\Exception\TransportException;
|
||||||
|
use Symfony\Component\Serializer\Exception\MissingConstructorArgumentsException;
|
||||||
|
use Symfony\Component\Serializer\Exception\NotNormalizableValueException;
|
||||||
use Symfony\Component\Serializer\SerializerInterface;
|
use Symfony\Component\Serializer\SerializerInterface;
|
||||||
use Symfony\Contracts\HttpClient\HttpClientInterface;
|
use Symfony\Contracts\HttpClient\HttpClientInterface;
|
||||||
|
|
||||||
@ -33,7 +35,9 @@ trait BriloApiFetchTrait
|
|||||||
*/
|
*/
|
||||||
protected function fetchApiResponse(string $uri, string $class): array
|
protected function fetchApiResponse(string $uri, string $class): array
|
||||||
{
|
{
|
||||||
return $this->retryingFailRequest($this->retryCount, $this->sleepTimeS, [TransportException::class, BriloRemoteApiException::class], $this->logger, function () use ($uri, $class) {
|
return $this->retryingFailRequest($this->retryCount, $this->sleepTimeS, [
|
||||||
|
TransportException::class, BriloRemoteApiException::class, NotNormalizableValueException::class, MissingConstructorArgumentsException::class
|
||||||
|
], $this->logger, function () use ($uri, $class) {
|
||||||
$this->logger->debug('Trying to download brilo users');
|
$this->logger->debug('Trying to download brilo users');
|
||||||
|
|
||||||
$response = $this->httpClient->request('GET', $uri);
|
$response = $this->httpClient->request('GET', $uri);
|
||||||
|
@ -18,6 +18,7 @@ class BriloApiPosts
|
|||||||
protected readonly HttpClientInterface $httpClient,
|
protected readonly HttpClientInterface $httpClient,
|
||||||
protected readonly LoggerInterface $logger,
|
protected readonly LoggerInterface $logger,
|
||||||
protected readonly SerializerInterface $serializer,
|
protected readonly SerializerInterface $serializer,
|
||||||
|
protected readonly string $url,
|
||||||
protected readonly int $retryCount = 3,
|
protected readonly int $retryCount = 3,
|
||||||
protected readonly int $sleepTimeS = 1,
|
protected readonly int $sleepTimeS = 1,
|
||||||
) {
|
) {
|
||||||
@ -30,6 +31,6 @@ class BriloApiPosts
|
|||||||
*/
|
*/
|
||||||
public function getPosts(): array
|
public function getPosts(): array
|
||||||
{
|
{
|
||||||
return $this->fetchApiResponse('https://jsonplaceholder.typicode.com/posts', Post::class);
|
return $this->fetchApiResponse($this->url, Post::class);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,7 @@ final class BriloApiUsers
|
|||||||
protected readonly HttpClientInterface $httpClient,
|
protected readonly HttpClientInterface $httpClient,
|
||||||
protected readonly LoggerInterface $logger,
|
protected readonly LoggerInterface $logger,
|
||||||
protected readonly SerializerInterface $serializer,
|
protected readonly SerializerInterface $serializer,
|
||||||
|
protected readonly string $url,
|
||||||
protected readonly int $retryCount = 3,
|
protected readonly int $retryCount = 3,
|
||||||
protected readonly int $sleepTimeS = 1,
|
protected readonly int $sleepTimeS = 1,
|
||||||
) {
|
) {
|
||||||
@ -31,6 +32,6 @@ final class BriloApiUsers
|
|||||||
*/
|
*/
|
||||||
public function getUsers(): array
|
public function getUsers(): array
|
||||||
{
|
{
|
||||||
return $this->fetchApiResponse('https://jsonplaceholder.typicode.com/users', User::class);
|
return $this->fetchApiResponse($this->url, User::class);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -55,7 +55,7 @@ qui aperiam non debitis possimus qui neque nisi nulla"
|
|||||||
|
|
||||||
$response = new JsonMockResponse(self::API_POSTS_LIST);
|
$response = new JsonMockResponse(self::API_POSTS_LIST);
|
||||||
$mockedClient = new MockHttpClient($response);
|
$mockedClient = new MockHttpClient($response);
|
||||||
$briloApiPosts = new BriloApiPosts($mockedClient, $this->getLogger(), $serializer);
|
$briloApiPosts = new BriloApiPosts($mockedClient, $this->getLogger(), $serializer, 'http://nonexistent.local');
|
||||||
$this->assertEquals($testUserList, $briloApiPosts->getPosts());
|
$this->assertEquals($testUserList, $briloApiPosts->getPosts());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -73,7 +73,7 @@ qui aperiam non debitis possimus qui neque nisi nulla"
|
|||||||
return $response;
|
return $response;
|
||||||
});
|
});
|
||||||
$this->expectException(BriloRemoteApiException::class);
|
$this->expectException(BriloRemoteApiException::class);
|
||||||
$briloApiPosts = new BriloApiPosts($mockedClient, $this->getLogger(), $serializer);
|
$briloApiPosts = new BriloApiPosts($mockedClient, $this->getLogger(), $serializer, 'http://nonexistent.local');
|
||||||
$briloApiPosts->getPosts();
|
$briloApiPosts->getPosts();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,7 +57,7 @@ nihil sint nostrum voluptatem reiciendis et"
|
|||||||
|
|
||||||
$response = new JsonMockResponse(self::API_COMMENTS_LIST);
|
$response = new JsonMockResponse(self::API_COMMENTS_LIST);
|
||||||
$mockedClient = new MockHttpClient($response);
|
$mockedClient = new MockHttpClient($response);
|
||||||
$briloApiPosts = new BriloApiComments($mockedClient, $this->getLogger(), $serializer);
|
$briloApiPosts = new BriloApiComments($mockedClient, $this->getLogger(), $serializer, 'http://nonexistent.local/');
|
||||||
$this->assertEquals($testCommentsList, $briloApiPosts->getComments());
|
$this->assertEquals($testCommentsList, $briloApiPosts->getComments());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -75,7 +75,7 @@ nihil sint nostrum voluptatem reiciendis et"
|
|||||||
return $response;
|
return $response;
|
||||||
});
|
});
|
||||||
$this->expectException(BriloRemoteApiException::class);
|
$this->expectException(BriloRemoteApiException::class);
|
||||||
$briloApiPosts = new BriloApiComments($mockedClient, $this->getLogger(), $serializer);
|
$briloApiPosts = new BriloApiComments($mockedClient, $this->getLogger(), $serializer, 'http://nonexistent.local');
|
||||||
$briloApiPosts->getComments();
|
$briloApiPosts->getComments();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -85,7 +85,7 @@ class BriloApiUsersTest extends TestCase
|
|||||||
|
|
||||||
$response = new JsonMockResponse(self::API_USER_LIST);
|
$response = new JsonMockResponse(self::API_USER_LIST);
|
||||||
$mockedClient = new MockHttpClient($response);
|
$mockedClient = new MockHttpClient($response);
|
||||||
$briloApiUsers = new BriloApiUsers($mockedClient, $this->getLogger(), $serializer);
|
$briloApiUsers = new BriloApiUsers($mockedClient, $this->getLogger(), $serializer, 'http://nonexistent.local');
|
||||||
$this->assertEquals($testUserList, $briloApiUsers->getUsers());
|
$this->assertEquals($testUserList, $briloApiUsers->getUsers());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -103,7 +103,7 @@ class BriloApiUsersTest extends TestCase
|
|||||||
return $response;
|
return $response;
|
||||||
});
|
});
|
||||||
$this->expectException(BriloRemoteApiException::class);
|
$this->expectException(BriloRemoteApiException::class);
|
||||||
$briloApiUsers = new BriloApiUsers($mockedClient, $this->getLogger(), $serializer);
|
$briloApiUsers = new BriloApiUsers($mockedClient, $this->getLogger(), $serializer, 'http://nonexistent.local');
|
||||||
$briloApiUsers->getUsers();
|
$briloApiUsers->getUsers();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user