diff --git a/composer.json b/composer.json index 728b214..b3d6665 100644 --- a/composer.json +++ b/composer.json @@ -13,7 +13,8 @@ ], "require": { "php": ">=5.4.9", - "ext-soap": "*" + "ext-soap": "*", + "symfony/cache": "~2.8|~3.0|~4.0" }, "require-dev": { "satooshi/php-coveralls": "~0.6.1", diff --git a/src/Mero/Correios/Client.php b/src/Mero/Correios/Client.php index cd86425..c1c4b93 100644 --- a/src/Mero/Correios/Client.php +++ b/src/Mero/Correios/Client.php @@ -5,6 +5,7 @@ use Mero\Correios\Exception\AddressNotFoundException; use Mero\Correios\Exception\InvalidZipCodeException; use Mero\Correios\Model\Address; +use Symfony\Component\Cache\Simple\FilesystemCache; class Client { @@ -36,24 +37,33 @@ public function findAddressByZipCode($zipCode) if (strlen($zipCode) != 8) { throw new InvalidZipCodeException('The brazilian zip code should have exacly 8 characters.'); } - try { - $wsdlConnection = $this->createWsdlConnection(); - $address = $wsdlConnection->__soapCall('consultaCEP', [ - 'consultaCEP' => [ - 'cep' => $zipCode - ] - ]); - return new Address( - $address->return->end, - $address->return->bairro, - $address->return->cidade, - $address->return->uf, - $address->return->cep - ); - } catch (\SoapFault $e) { - throw new AddressNotFoundException($e->getMessage()); + $cache = new FilesystemCache(); + if (!$cache->has("mero_correios.{$zipCode}")) { + try { + $wsdlConnection = $this->createWsdlConnection(); + $address = $wsdlConnection->__soapCall('consultaCEP', [ + 'consultaCEP' => [ + 'cep' => $zipCode + ] + ]); + + $address = new Address( + $address->return->end, + $address->return->bairro, + $address->return->cidade, + $address->return->uf, + $address->return->cep + ); + $cache->set("mero_correios.{$zipCode}", $address); + + return $address; + } catch (\SoapFault $e) { + throw new AddressNotFoundException($e->getMessage()); + } } + + return $cache->get("mero_correios.{$zipCode}"); } /**