1
0
mirror of https://github.com/ToxicCrack/PrintABrick.git synced 2025-05-17 21:00:09 -07:00

Add ApiExceptions

This commit is contained in:
David Hübner 2017-04-05 16:56:15 +02:00
parent 4c78346c89
commit 6fb797a124
7 changed files with 108 additions and 16 deletions

View File

@ -9,6 +9,10 @@ use AppBundle\Api\Client\Brickset\Entity\Set;
use AppBundle\Api\Client\Brickset\Entity\Subtheme; use AppBundle\Api\Client\Brickset\Entity\Subtheme;
use AppBundle\Api\Client\Brickset\Entity\Theme; use AppBundle\Api\Client\Brickset\Entity\Theme;
use AppBundle\Api\Client\Brickset\Entity\Year; use AppBundle\Api\Client\Brickset\Entity\Year;
use AppBundle\Api\Exception\ApiException;
use AppBundle\Api\Exception\AuthenticationFailedException;
use AppBundle\Api\Exception\CallFailedException;
use AppBundle\Api\Exception\EmptyResponseException;
use Symfony\Component\Asset\Exception\LogicException; use Symfony\Component\Asset\Exception\LogicException;
use Symfony\Component\Debug\Exception\ContextErrorException; use Symfony\Component\Debug\Exception\ContextErrorException;
@ -42,6 +46,8 @@ class Brickset extends \SoapClient
{ {
$this->apiKey = $apikey; $this->apiKey = $apikey;
$options['cache_wsdl'] = WSDL_CACHE_NONE;
foreach (self::$classmap as $key => $value) { foreach (self::$classmap as $key => $value) {
if (!isset($options['classmap'][$key])) { if (!isset($options['classmap'][$key])) {
$options['classmap'][$key] = $value; $options['classmap'][$key] = $value;
@ -66,13 +72,12 @@ class Brickset extends \SoapClient
$parameters['apiKey'] = $this->apiKey; $parameters['apiKey'] = $this->apiKey;
try { try {
$this->checkApiKey();
return $this->__soapCall($method, [$parameters])->{$method.'Result'}; return $this->__soapCall($method, [$parameters])->{$method.'Result'};
} catch (\SoapFault $e) { } catch (\SoapFault $e) {
//TODO throw new CallFailedException(ApiException::BRICKSET);
throw new LogicException($e->getCode().' - '.$e->getMessage());
} catch (ContextErrorException $e) { } catch (ContextErrorException $e) {
//TODO empty resposne throw new EmptyResponseException(ApiException::BRICKSET);
throw new LogicException($method.' - '.$e->getMessage());
} }
} }
@ -247,10 +252,14 @@ class Brickset extends \SoapClient
/** /**
* Check if an API key is valid. * Check if an API key is valid.
* *
* @return bool * @throws AuthenticationFailedException If api key is not valid
*/ */
public function checkKey() private function checkApiKey()
{ {
return ($this->call('checkKey', [])) == 'OK' ? true : false; $parameters['apiKey'] = $this->apiKey;
if($this->__soapCall('checkKey', [$parameters])->checkKeyResult != 'OK') {
throw new AuthenticationFailedException(ApiException::BRICKSET);
}
} }
} }

View File

@ -14,7 +14,7 @@ class PropertyNameConverter implements NameConverterInterface
public function denormalize($propertyName) public function denormalize($propertyName)
{ {
switch ($propertyName) { switch ($propertyName) {
case 'part_num': return 'id'; case 'part_num': return 'number';
case 'part_cat_id': return 'categoryId'; case 'part_cat_id': return 'categoryId';
case 'part_img_url': return 'imgUrl'; case 'part_img_url': return 'imgUrl';
case 'part_url': return 'url'; case 'part_url': return 'url';

View File

@ -2,6 +2,10 @@
namespace AppBundle\Api\Client\Rebrickable; namespace AppBundle\Api\Client\Rebrickable;
use AppBundle\Api\Exception\ApiException;
use AppBundle\Api\Exception\AuthenticationFailedException;
use AppBundle\Api\Exception\CallFailedException;
use AppBundle\Api\Exception\EmptyResponseException;
use GuzzleHttp\Client; use GuzzleHttp\Client;
use GuzzleHttp\Exception\ClientException; use GuzzleHttp\Exception\ClientException;
use GuzzleHttp\Exception\ConnectException; use GuzzleHttp\Exception\ConnectException;
@ -51,17 +55,15 @@ class Rebrickable_v3
return $content; return $content;
} catch (ConnectException $e) { } catch (ConnectException $e) {
//TODO throw new CallFailedException(ApiException::REBRICKABLE);
throw new LogicException($e);
} catch (ClientException $e) { } catch (ClientException $e) {
//TODO
if ($e->getCode() == 404) { if ($e->getCode() == 404) {
throw new LogicException('Not Found'); throw new EmptyResponseException(ApiException::REBRICKABLE);
} else if ($e->getCode() == 401) {
throw new AuthenticationFailedException(ApiException::REBRICKABLE);
} }
if ($e->getCode() == 500) {
throw new LogicException('Invalid token'); throw new ApiException(ApiException::REBRICKABLE,$e,$e->getCode());
}
throw new LogicException($e);
} }
} }
} }

View File

@ -0,0 +1,39 @@
<?php
namespace AppBundle\Api\Exception;
class ApiException extends \Exception
{
const BRICKSET = 'Brickset';
const REBRICKABLE = 'Rebrickable';
/**
* @var string
*/
private $service;
/**
* ApiException constructor.
*/
public function __construct($service = 'unknownService', $message = '', $code = 0, \Exception $previous = null)
{
parent::__construct($message, $code, $previous);
$this->service = $service;
}
/**
* @return string
*/
public function getService()
{
return $this->service;
}
/**
* @param string $service
*/
public function setService($service)
{
$this->service = $service;
}
}

View File

@ -0,0 +1,14 @@
<?php
namespace AppBundle\Api\Exception;
class AuthenticationFailedException extends ApiException
{
/**
* ApiException constructor.
*/
public function __construct($service)
{
parent::__construct($service, 'flash.authentication_failed');
}
}

View File

@ -0,0 +1,14 @@
<?php
namespace AppBundle\Api\Exception;
class CallFailedException extends ApiException
{
/**
* ApiException constructor.
*/
public function __construct($service)
{
parent::__construct($service, 'flash.call_failed');
}
}

View File

@ -0,0 +1,14 @@
<?php
namespace AppBundle\Api\Exception;
class EmptyResponseException extends ApiException
{
/**
* ApiException constructor.
*/
public function __construct($service)
{
parent::__construct($service, 'flash.empty_response');
}
}