inject logger, do not catch exceptions that should lead to termination

Cette révision appartient à :
Daniel Seifert 2022-07-01 09:24:16 +02:00
Parent 6854f12e13
révision c502926daf
Signé par: DanielS
ID de la clé GPG: 8A7C4C6ED1915C6F
18 fichiers modifiés avec 157 ajouts et 40 suppressions

Voir le fichier

@ -1,6 +1,7 @@
```
$client = new Client('accesstoken');
$request = (new \D3\LinkmobilityClient\SMS\Request('me', 'message'))
->addRecipient(new Recipient('recipient'));
$client->setLogger($logger); // optional
$request = new D3\LinkmobilityClient\SMS\RequestFactory($message, $client)->getSmsRequest())
->addRecipient(new D3\LinkmobilityClient\ValueObject\Recipient('recipient', 'DE'));
$client->request($request)
```

Voir le fichier

@ -21,7 +21,9 @@ use D3\LinkmobilityClient\Exceptions\ApiException;
use D3\LinkmobilityClient\Exceptions\ExceptionMessages;
use D3\LinkmobilityClient\Request\RequestInterface;
use GuzzleHttp\Exception\GuzzleException;
use InvalidArgumentException;
use Psr\Http\Message\ResponseInterface;
use Psr\Log\LoggerInterface;
use RuntimeException;
class Client
@ -30,6 +32,8 @@ class Client
public $apiUrl;
public $requestClient;
private $logger;
public function __construct(string $accessToken, $apiUrl = false, $client = false)
{
if ($apiUrl !== false && false === $apiUrl instanceof UrlInterface) {
@ -47,6 +51,7 @@ class Client
* @return Response\ResponseInterface
* @throws ApiException
* @throws GuzzleException
* @throws InvalidArgumentException
*/
public function request(RequestInterface $request) : Response\ResponseInterface
{
@ -70,6 +75,8 @@ class Client
{
$options['headers']['Authorization'] = 'Bearer '.$this->accessToken;
if ($this->hasLogger()) $this->getLogger()->debug('request '.$url, $options);
$response = $this->requestClient->request(
$method,
$url,
@ -77,11 +84,45 @@ class Client
);
if ($response->getStatusCode() != 200) {
throw new ApiException(
sprintf(ExceptionMessages::NOK_REQUEST_RETURN, [$url, $response->getStatusCode()])
);
$message = sprintf(ExceptionMessages::NOK_REQUEST_RETURN, [$url, $response->getStatusCode()]);
if ($this->hasLogger()) $this->getLogger()->error($message);
throw new ApiException($message);
}
if ($this->hasLogger()) {
$response->getBody()->rewind();
$this->getLogger()->debug('response', [$response->getBody()->getContents()]);
}
return $response;
}
/**
* @param mixed $logger
*
* @return Client
*/
public function setLogger(LoggerInterface $logger ) : Client
{
$this->logger = $logger;
return $this;
}
/**
* @return bool
*/
public function hasLogger() : bool
{
return $this->logger instanceof LoggerInterface;
}
/**
* @return LoggerInterface
*/
public function getLogger(): LoggerInterface
{
return $this->logger;
}
}

Voir le fichier

@ -17,6 +17,7 @@ declare(strict_types=1);
namespace D3\LinkmobilityClient\RecipientsList;
use D3\LinkmobilityClient\Client;
use D3\LinkmobilityClient\Exceptions\ExceptionMessages;
use D3\LinkmobilityClient\Exceptions\RecipientException;
use D3\LinkmobilityClient\ValueObject\Recipient;
@ -27,11 +28,21 @@ use libphonenumber\PhoneNumberUtil;
class RecipientsList implements RecipientsListInterface, Iterator
{
/**
* @var Client
*/
private $client;
/**
* @var array
*/
private $recipients = [];
public function __construct( Client $client )
{
$this->setClient($client);
}
public function add(Recipient $recipient) : RecipientsListInterface
{
$phoneUtil = PhoneNumberUtil::getInstance();
@ -54,9 +65,13 @@ class RecipientsList implements RecipientsListInterface, Iterator
$this->recipients[ md5( serialize( $recipient ) ) ] = $recipient;
} catch (NumberParseException $e) {
// var_dump($e);
if ($this->getClient()->hasLogger()) {
$this->getClient()->getLogger()->info($e->getMessage());
}
} catch (RecipientException $e) {
// var_dump($e);
if ($this->getClient()->hasLogger()) {
$this->getClient()->getLogger()->info($e->getMessage());
}
}
return $this;
@ -119,4 +134,20 @@ class RecipientsList implements RecipientsListInterface, Iterator
{
return current($this->recipients) instanceof Recipient;
}
/**
* @return Client
*/
public function getClient(): Client
{
return $this->client;
}
/**
* @param Client $client
*/
public function setClient( Client $client )
{
$this->client = $client;
}
}

Voir le fichier

@ -17,10 +17,13 @@ declare(strict_types=1);
namespace D3\LinkmobilityClient\RecipientsList;
use D3\LinkmobilityClient\Client;
use D3\LinkmobilityClient\ValueObject\Recipient;
interface RecipientsListInterface
{
public function __construct(Client $client);
public function add(Recipient $recipient) : RecipientsListInterface;
public function clearRecipents() : RecipientsListInterface;

Voir le fichier

@ -18,6 +18,7 @@ declare( strict_types = 1 );
namespace D3\LinkmobilityClient\Request;
use Assert\Assert;
use D3\LinkmobilityClient\Client;
use D3\LinkmobilityClient\RecipientsList\RecipientsList;
use D3\LinkmobilityClient\RecipientsList\RecipientsListInterface;
use D3\LinkmobilityClient\Response\ResponseInterface;
@ -36,6 +37,11 @@ abstract class Request implements RequestInterface
*/
private $message;
/**
* @var Client
*/
private $client;
/**
* @var string
*/
@ -109,10 +115,11 @@ abstract class Request implements RequestInterface
/**
* @param SmsMessageAbstract $message
*/
public function __construct(SmsMessageInterface $message)
public function __construct(SmsMessageInterface $message, Client $client)
{
$this->recipientsList = new RecipientsList();
$this->recipientsList = new RecipientsList($client);
$this->setMessage( $message );
$this->setClient($client);
return $this;
}
@ -495,4 +502,20 @@ abstract class Request implements RequestInterface
$FQClassName = $this->getResponseClass();
return new $FQClassName($rawResponse);
}
/**
* @return Client
*/
public function getClient(): Client
{
return $this->client;
}
/**
* @param Client $client
*/
public function setClient( Client $client )
{
$this->client = $client;
}
}

Voir le fichier

@ -17,6 +17,9 @@ declare(strict_types=1);
namespace D3\LinkmobilityClient\Request;
use D3\LinkmobilityClient\Client;
use D3\LinkmobilityClient\ValueObject\SmsMessageInterface;
use InvalidArgumentException;
use Psr\Http\Message\ResponseInterface as PsrResponseInterface;
use D3\LinkmobilityClient\Response\ResponseInterface as LMResponseInterface;
@ -41,6 +44,8 @@ interface RequestInterface
const SENDERADDRESSTYPE_ALPHANUMERIC = 'alphanumeric';
const SENDERADDRESSTYPE_SHORTCODE = 'shortcode';
public function __construct(SmsMessageInterface $message, Client $client);
public function setMethod(string $method);
/**
@ -89,6 +94,8 @@ interface RequestInterface
* Must validate the input of the request
* This is called before sending the request
* Must throw an exception if the validation fails
*
* @throws InvalidArgumentException
*/
public function validate();
}

Voir le fichier

@ -27,6 +27,8 @@ abstract class Response implements ResponseInterface
public function __construct(\Psr\Http\Message\ResponseInterface $rawResponse)
{
$this->rawResponse = $rawResponse;
$this->rawResponse->getBody()->rewind();
$this->content = json_decode($this->rawResponse->getBody()->getContents(), true);
}

Voir le fichier

@ -20,7 +20,7 @@ namespace D3\LinkmobilityClient\SMS;
use Assert\Assert;
use D3\LinkmobilityClient\Request\Request;
use D3\LinkmobilityClient\ValueObject\SmsBinaryMessage;
use D3\LinkmobilityClient\ValueObject\SmsMessage;
use InvalidArgumentException;
class BinaryRequest extends Request implements SmsRequestInterface
{
@ -42,6 +42,9 @@ class BinaryRequest extends Request implements SmsRequestInterface
);
}
/**
* @throws InvalidArgumentException
*/
public function validate()
{
parent::validate();

Voir le fichier

@ -17,7 +17,9 @@ declare( strict_types = 1 );
namespace D3\LinkmobilityClient\SMS;
use D3\LinkmobilityClient\Client;
use D3\LinkmobilityClient\ValueObject\SmsBinaryMessage;
use D3\LinkmobilityClient\ValueObject\SmsMessageInterface;
use D3\LinkmobilityClient\ValueObject\SmsTextMessage;
use Phlib\SmsLength\SmsLength;
@ -34,24 +36,26 @@ class RequestFactory
const GSM_UCS2 = 'ucs-2';
private $message;
private $client;
public function __construct($message)
public function __construct($message, Client $client)
{
$this->message = $message;
$this->client = $client;
}
/**
* @return SmsRequestInterface
*/
public function getRequest() : SmsRequestInterface
public function getSmsRequest() : SmsRequestInterface
{
$smsLength = new SmsLength($this->message);
if ($smsLength->getEncoding() === self::GSM_7BIT) {
$message = new SmsTextMessage($this->message);
return new TextRequest($message);
return new TextRequest($message, $this->client);
}
$message = new SmsBinaryMessage($this->message);
return new BinaryRequest($message);
return new BinaryRequest($message, $this->client);
}
}

Voir le fichier

@ -17,11 +17,9 @@ declare( strict_types = 1 );
namespace D3\LinkmobilityClient\SMS;
use D3\LinkmobilityClient\ValueObject\SmsMessage;
interface RequestFactoryInterface
{
public function __construct(SmsMessage $message);
public function __construct($message);
public function getRequest() : SmsRequestInterface;
}

Voir le fichier

@ -15,9 +15,4 @@
namespace D3\LinkmobilityClient\SMS;
use D3\LinkmobilityClient\ValueObject\SmsMessageInterface;
interface SmsRequestInterface
{
public function __construct(SmsMessageInterface $message);
}
interface SmsRequestInterface {}

Voir le fichier

@ -19,8 +19,8 @@ namespace D3\LinkmobilityClient\SMS;
use Assert\Assert;
use D3\LinkmobilityClient\Request\Request;
use D3\LinkmobilityClient\ValueObject\SmsMessageInterface;
use D3\LinkmobilityClient\ValueObject\SmsTextMessage;
use InvalidArgumentException;
class TextRequest extends Request implements SmsRequestInterface
{
@ -32,6 +32,9 @@ class TextRequest extends Request implements SmsRequestInterface
return '/rest/smsmessaging/text';
}
/**
* @throws InvalidArgumentException
*/
public function validate()
{
parent::validate();

Voir le fichier

@ -16,17 +16,20 @@ class Recipient extends StringValueObject
*/
private $countryCode;
/**
* @param string $number
* @param string $iso2CountryCode
*
* @throws NumberParseException
*/
public function __construct(string $number, string $iso2CountryCode)
{
Assert::that($iso2CountryCode)->string()->length(2);
$phoneUtil = PhoneNumberUtil::getInstance();
try {
$phoneNumber = $phoneUtil->parse($number, strtoupper($iso2CountryCode));
$number = ltrim($phoneUtil->format($phoneNumber, PhoneNumberFormat::E164), '+');
} catch ( NumberParseException $e) {
var_dump($e);
}
$phoneNumber = $phoneUtil->parse($number, strtoupper($iso2CountryCode));
$number = ltrim($phoneUtil->format($phoneNumber, PhoneNumberFormat::E164), '+');
parent::__construct($number);
$this->countryCode = $iso2CountryCode;

Voir le fichier

@ -18,21 +18,19 @@ class Sender extends StringValueObject
* @param string $iso2CountryCode
*
* @throws RecipientException
* @throws NumberParseException
*/
public function __construct(string $number, string $iso2CountryCode)
{
Assert::that($iso2CountryCode)->string()->length(2);
$phoneUtil = PhoneNumberUtil::getInstance();
try {
$phoneNumber = $phoneUtil->parse( $number, strtoupper($iso2CountryCode) );
$number = $phoneUtil->format( $phoneNumber, PhoneNumberFormat::E164 );
if (false === $phoneUtil->isValidNumber($phoneNumber)) {
throw new RecipientException( ExceptionMessages::INVALID_SENDER );
}
} catch ( NumberParseException $e) {
var_dump($e);
$phoneNumber = $phoneUtil->parse( $number, strtoupper($iso2CountryCode) );
$number = $phoneUtil->format( $phoneNumber, PhoneNumberFormat::E164 );
if (false === $phoneUtil->isValidNumber($phoneNumber)) {
throw new RecipientException( ExceptionMessages::INVALID_SENDER );
}
parent::__construct( $number);

Voir le fichier

@ -19,6 +19,9 @@ class SmsBinaryMessage extends SmsMessageAbstract
$smsLength->validate();
}
/**
* @return array|false|string
*/
public function getMessageContent()
{
return str_split(

Voir le fichier

@ -26,7 +26,7 @@ abstract class SmsMessageAbstract extends StringValueObject implements SmsMessag
return $smsLength->getSize();
}
public function getMessageContent()
public function getMessageContent() : string
{
return (string) $this->value;
}

Voir le fichier

@ -21,5 +21,5 @@ interface SmsMessageInterface
public function length() : int;
public function getMessageContent();
public function getMessageContent() : string;
}

Voir le fichier

@ -4,12 +4,14 @@ declare(strict_types=1);
namespace D3\LinkmobilityClient\ValueObject;
use InvalidArgumentException;
use Phlib\SmsLength\SmsLength;
class SmsTextMessage extends SmsMessageAbstract
{
/**
* @param string $message
* @throws InvalidArgumentException
*/
public function __construct(string $message)
{