const en Money y multi provider
This commit is contained in:
@ -5,61 +5,89 @@ use DateTimeInterface;
|
|||||||
use Psr\Log\LoggerInterface;
|
use Psr\Log\LoggerInterface;
|
||||||
use Incoviba\Common\Define\Money\Provider;
|
use Incoviba\Common\Define\Money\Provider;
|
||||||
use Incoviba\Common\Implement\Exception\EmptyResponse;
|
use Incoviba\Common\Implement\Exception\EmptyResponse;
|
||||||
use Incoviba\Service\Money\MiIndicador;
|
|
||||||
|
|
||||||
class Money
|
class Money
|
||||||
{
|
{
|
||||||
|
const UF = 'uf';
|
||||||
|
const USD = 'usd';
|
||||||
|
const IPC = 'ipc';
|
||||||
|
|
||||||
public function __construct(protected LoggerInterface $logger) {}
|
public function __construct(protected LoggerInterface $logger) {}
|
||||||
|
|
||||||
protected array $providers;
|
protected array $providers;
|
||||||
public function register(string $name, Provider $provider): Money
|
public function register(string $name, Provider $provider): Money
|
||||||
{
|
{
|
||||||
if (isset($this->providers) and isset($this->providers[$name]) and $this->providers[$name] === $provider) {
|
if (isset($this->providers) and isset($this->providers[$name]) and in_array($provider, $this->providers[$name])) {
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
$this->providers[$name] = $provider;
|
if (!isset($this->providers[$name])) {
|
||||||
|
$this->providers[$name] = [];
|
||||||
|
}
|
||||||
|
$this->providers[$name] []= $provider;
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
public function getProvider(string $name): Provider
|
public function getProviders(string $name): array
|
||||||
{
|
{
|
||||||
return $this->providers[$name];
|
return $this->providers[$name];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function get(string $provider, DateTimeInterface $dateTime): float
|
public function get(string $provider, DateTimeInterface $dateTime): float
|
||||||
{
|
{
|
||||||
|
$providers = $this->getProviders($provider);
|
||||||
|
foreach ($providers as $provider) {
|
||||||
try {
|
try {
|
||||||
return $this->getProvider($provider)->get(MiIndicador::getSymbol($provider), $dateTime);
|
return $provider->get(self::getSymbol($provider), $dateTime);
|
||||||
} catch (EmptyResponse) {
|
} catch (EmptyResponse $exception) {
|
||||||
return 0;
|
$this->logger->notice($exception);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
public function getUF(?DateTimeInterface $dateTime = null): float
|
public function getUF(?DateTimeInterface $dateTime = null): float
|
||||||
{
|
{
|
||||||
|
$providers = $this->getProviders('uf');
|
||||||
|
foreach ($providers as $provider) {
|
||||||
try {
|
try {
|
||||||
return $this->getProvider('uf')->get(MiIndicador::UF, $dateTime);
|
return $provider->get(self::UF, $dateTime);
|
||||||
} catch (EmptyResponse $exception) {
|
} catch (EmptyResponse $exception) {
|
||||||
$this->logger->debug($exception);
|
$this->logger->notice($exception);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
public function getIPC(DateTimeInterface $start, DateTimeInterface $end): float
|
public function getIPC(DateTimeInterface $start, DateTimeInterface $end): float
|
||||||
{
|
{
|
||||||
if ($start >= $end) {
|
if ($start >= $end) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
$providers = $this->getProviders('ipc');
|
||||||
|
foreach ($providers as $provider) {
|
||||||
try {
|
try {
|
||||||
return $this->getProvider('ipc')->getVar($start, $end);
|
return $provider->getVar($start, $end);
|
||||||
} catch (EmptyResponse) {
|
} catch (EmptyResponse $exception) {
|
||||||
return 0;
|
$this->logger->notice($exception);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
public function getUSD(DateTimeInterface $dateTime): float
|
public function getUSD(DateTimeInterface $dateTime): float
|
||||||
{
|
{
|
||||||
|
$providers = $this->getProviders('usd');
|
||||||
|
foreach ($providers as $provider) {
|
||||||
try {
|
try {
|
||||||
return $this->getProvider('usd')->get(MiIndicador::USD, $dateTime);
|
return $provider->get(self::USD, $dateTime);
|
||||||
} catch (EmptyResponse $exception) {
|
} catch (EmptyResponse $exception) {
|
||||||
$this->logger->critical($exception);
|
$this->logger->notice($exception);
|
||||||
|
}
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function getSymbol(string $identifier): string
|
||||||
|
{
|
||||||
|
$upper = strtoupper($identifier);
|
||||||
|
$output = '';
|
||||||
|
eval("\$output = self::{$upper};");
|
||||||
|
return $output;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,10 +9,6 @@ use Incoviba\Common\Implement\Exception\EmptyResponse;
|
|||||||
|
|
||||||
class MiIndicador implements Provider
|
class MiIndicador implements Provider
|
||||||
{
|
{
|
||||||
const UF = 'uf';
|
|
||||||
const IPC = 'ipc';
|
|
||||||
const USD = 'dolar';
|
|
||||||
|
|
||||||
public function __construct(protected ClientInterface $client) {}
|
public function __construct(protected ClientInterface $client) {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -42,11 +38,4 @@ class MiIndicador implements Provider
|
|||||||
}
|
}
|
||||||
return $json->serie[0]->valor;
|
return $json->serie[0]->valor;
|
||||||
}
|
}
|
||||||
public static function getSymbol(string $identifier): string
|
|
||||||
{
|
|
||||||
$upper = strtoupper($identifier);
|
|
||||||
$output = '';
|
|
||||||
eval("\$output = self::{$upper};");
|
|
||||||
return $output;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user