Skip to content
Snippets Groups Projects
Commit 19077841 authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Merge branch release_4.0.0

parent 4ffdf72e
No related branches found
No related tags found
No related merge requests found
Pipeline #11786 passed
...@@ -9,8 +9,9 @@ ...@@ -9,8 +9,9 @@
} }
], ],
"require": { "require": {
"php": "7.3.*",
"ext-pdo": "*", "ext-pdo": "*",
"unicaen/app": "^4.0", "unicaen/app": "dev-release_4.0.0",
"doctrine/dbal": "^2.9", "doctrine/dbal": "^2.9",
"beberlei/assert": "^2.7", "beberlei/assert": "^2.7",
"ramsey/uuid": "^3.6", "ramsey/uuid": "^3.6",
...@@ -18,7 +19,7 @@ ...@@ -18,7 +19,7 @@
"laminas/laminas-dependency-plugin": "^2.1" "laminas/laminas-dependency-plugin": "^2.1"
}, },
"require-dev": { "require-dev": {
"unicaen/test": "dev-laminas_migration", "unicaen/test": "^3.0",
"phpunit/phpunit": "~5.4" "phpunit/phpunit": "~5.4"
}, },
"autoload": { "autoload": {
......
...@@ -12,7 +12,6 @@ use UnicaenDbImport\Domain\Destination; ...@@ -12,7 +12,6 @@ use UnicaenDbImport\Domain\Destination;
use UnicaenDbImport\Domain\Import; use UnicaenDbImport\Domain\Import;
use UnicaenDbImport\Domain\Source; use UnicaenDbImport\Domain\Source;
use UnicaenDbImport\Domain\Synchro; use UnicaenDbImport\Domain\Synchro;
use Laminas\Filter\FilterInterface;
use UnicaenDbImport\Filter\ColumnName\ArrayMapColumnNameFilter; use UnicaenDbImport\Filter\ColumnName\ArrayMapColumnNameFilter;
use UnicaenDbImport\Filter\ColumnName\ColumnNameFilterInterface; use UnicaenDbImport\Filter\ColumnName\ColumnNameFilterInterface;
use UnicaenDbImport\Filter\ColumnValue\ColumnValueFilterInterface; use UnicaenDbImport\Filter\ColumnValue\ColumnValueFilterInterface;
......
...@@ -5,7 +5,6 @@ namespace UnicaenDbImport\Domain; ...@@ -5,7 +5,6 @@ namespace UnicaenDbImport\Domain;
use Assert\AssertionChain; use Assert\AssertionChain;
use Assert\InvalidArgumentException; use Assert\InvalidArgumentException;
use Doctrine\DBAL\Connection as DbConnection; use Doctrine\DBAL\Connection as DbConnection;
use Laminas\Filter\FilterInterface;
use Laminas\Stdlib\Parameters; use Laminas\Stdlib\Parameters;
use RuntimeException; use RuntimeException;
use stdClass; use stdClass;
......
...@@ -3,7 +3,6 @@ ...@@ -3,7 +3,6 @@
namespace UnicaenDbImport\Domain; namespace UnicaenDbImport\Domain;
use Doctrine\DBAL\Connection; use Doctrine\DBAL\Connection;
use Laminas\Filter\FilterInterface;
use UnicaenDbImport\Connection\ApiConnection; use UnicaenDbImport\Connection\ApiConnection;
use UnicaenDbImport\Filter\ColumnName\ColumnNameFilterInterface; use UnicaenDbImport\Filter\ColumnName\ColumnNameFilterInterface;
......
...@@ -3,7 +3,6 @@ ...@@ -3,7 +3,6 @@
namespace UnicaenDbImport\Filter\ColumnName; namespace UnicaenDbImport\Filter\ColumnName;
use Laminas\Filter\FilterChain; use Laminas\Filter\FilterChain;
use Laminas\Filter\FilterInterface;
use Laminas\Filter\StringToUpper; use Laminas\Filter\StringToUpper;
use Laminas\Filter\Word\CamelCaseToUnderscore; use Laminas\Filter\Word\CamelCaseToUnderscore;
......
<?php
namespace UnicaenDbImport\Service;
use Assert\Assertion;
use Assert\AssertionFailedException;
use Exception;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\ClientException;
use GuzzleHttp\Exception\GuzzleException;
use GuzzleHttp\Exception\RequestException;
use GuzzleHttp\Exception\ServerException;
use UnicaenApp\Exception\RuntimeException;
use UnicaenDbImport\Service\Exception\ApiException;
use Laminas\Http\Response;
use Laminas\Log\LoggerAwareTrait;
/**
* Service dédié à l'envoi de requêtes au Web Service.
*/
class CallService
{
use LoggerAwareTrait;
/**
* @var array
*/
protected $config;
/**
* @var Client
*/
protected $client;
/**
* @param array $config
* @return self
*/
public function setConfig(array $config)
{
try {
$this->loadConfig($config);
} catch (AssertionFailedException $e) {
throw ApiException::badConfig($e);
}
return $this;
}
/**
* Interroge le ws pour connaître sa version.
*
* @return \stdClass
*/
public function getVersion()
{
return $this->get('version/current');
}
/**
* Envoie une requête quelconque au web service, ex: 'version/current'.
*
* @param string $uri
* @return \stdClass
*/
public function get($uri)
{
$json = $this->sendRequest($uri);
return $json;
}
/**
* @param array $config
* @throws AssertionFailedException
*/
private function loadConfig(array $config)
{
Assertion::keyIsset($config, 'url');
$this->config = [
'base_uri' => $config['url'],
'headers' => [
'Accept' => 'application/json',
],
];
if (array_key_exists('user', $config)) {
$this->config['auth'] = [
$config['user'],
$config['password']
];
}
if (array_key_exists('verify', $config)) {
$this->config['verify'] = $config['verify'];
}
if (array_key_exists('timeout', $config)) {
$this->config['timeout'] = $config['timeout'];
}
if (array_key_exists('proxy', $config)) {
$this->config['proxy'] = $config['proxy'];
} else {
$this->config['proxy'] = ['no' => 'localhost'];
}
}
/**
* @param Client $client
* @return self
*/
public function setClient(Client $client)
{
$this->client = $client;
return $this;
}
/**
* @return Client
*/
public function getClient()
{
if ($this->client === null) {
$this->client = $this->createClient();
}
return $this->client;
}
/**
* @return Client
*/
private function createClient()
{
if ($this->config === null) {
throw new RuntimeException("Une config doit être fournie au préalable.");
}
return new Client($this->config);
}
/**
* Appel du Web Service d'import de données.
*
* @param string $uri : la "page" du Web Service à interroger
* @return \stdClass Réponse du Web Service décodé en JSON
*
* RMQ le client est configuré en utilisant les propriétés du FetcherService
*/
private function sendRequest($uri)
{
$client = $this->getClient();
try {
$_debut = microtime(true);
$response = $client->request('GET', $uri);
$_fin = microtime(true);
$this->logger->debug("Interrogation du WS : " . ($_fin - $_debut) . " secondes.");
} catch (ClientException $e) {
throw ApiException::clientError($e);
} catch (ServerException $e) {
throw ApiException::serverError($e);
} catch (RequestException $e) {
throw ApiException::networkError($e);
} catch (GuzzleException $e) {
throw ApiException::unexpectedError($uri, $e);
} catch (Exception $e) {
throw ApiException::unexpectedError($uri, $e);
}
if ($response->getStatusCode() !== Response::STATUS_CODE_200) {
throw ApiException::unexpectedResponse($uri, $response);
}
$body = $response->getBody();
$json = json_decode($body);
if ($json === null) {
// NULL is returned if the json cannot be decoded or if the encoded data is deeper than the recursion limit.
throw ApiException::invalidJSONResponse($uri, (string)$body);
}
return $json;
}
}
\ No newline at end of file
...@@ -10,7 +10,6 @@ use GuzzleHttp\Psr7; ...@@ -10,7 +10,6 @@ use GuzzleHttp\Psr7;
use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ResponseInterface;
use UnicaenApp\Exception\RuntimeException; use UnicaenApp\Exception\RuntimeException;
use UnicaenApp\Util; use UnicaenApp\Util;
use Laminas\Http\Response;
class ApiException extends RuntimeException class ApiException extends RuntimeException
{ {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment