Files
api-extranetwork/app/Core/Service/CurrencyService.php
ExtraNetwork e5c4b6aa13 first commit
2026-05-12 17:04:54 +03:00

146 lines
4.6 KiB
PHP

<?php
namespace App\Core\Service;
use App\Core\Repository\Currency\CurrencyRepository;
use App\Core\Repository\CurrencyRates\CurrencyRatesRepository;
use App\Exceptions\ApiErrorException;
use Illuminate\Support\Facades\Log;
class CurrencyService
{
private $currencyRepository;
const STATUS = 1;
public function __construct(
CurrencyRepository $currencyRepository,
CurrencyRatesRepository $currencyRatesRepository
)
{
$this->currencyRepository = $currencyRepository;
$this->currencyRatesRepository = $currencyRatesRepository;
}
public function getCurrencyList(array $params = [], $columns = ["*"])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$criteria = [
'criteria' => [
['field' => 'status', 'condition' => '=', 'value' => CurrencyService::STATUS],
],
"orderBy" => [
["field" => "name", "value" => "ASC"]
]
];
if(isset($params['justBasicCurrencies']) && $params['justBasicCurrencies']) {
$criteria['criteria'][] = ['field' => 'is_basic', 'condition' => '=', 'value' => 1];
}
$data = $this->currencyRepository->findByCriteria($criteria, $columns);
$response = [
'status' => true,
'data' => $data,
];
} catch (ApiErrorException $e) {
$response['message'] = $e->getMessage();
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function lastExchangeRate($currency, $exchangeCurrency)
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$criteria = [
'criteria' => [
['field' => 'currency_code', 'condition' => '=', 'value' => $currency],
['field' => 'exc_currency_code', 'condition' => '=', 'value' => $exchangeCurrency],
],
"orderBy" => [
["field" => "date", "value" => "DESC"]
]
,
'firstRow' => true,
];
$data = $this->currencyRatesRepository->findByCriteria($criteria);
$rate = fillOnUndefined($data, 'rate', 1);
$response = [
'status' => true,
'data' => $rate,
];
} catch (ApiErrorException $e) {
$response['message'] = $e->getMessage();
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function exchangeCurrencyRates($currency)
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$criteria = [
'criteria' => [
['field' => 'currency_code', 'condition' => '=', 'value' => $currency],
],
"orderBy" => [
["field" => "date", "value" => "DESC"]
],
'firstRow' => true,
];
$lastDate = $this->currencyRatesRepository->findByCriteria($criteria);
$criteria = [
'criteria' => [
['field' => 'currency_code', 'condition' => '=', 'value' => $currency],
['field' => 'date', 'condition' => '=', 'value' => $lastDate['date']],
],
"orderBy" => [
["field" => "currency_code", "value" => "ASC"],
["field" => "exc_currency_code", "value" => "ASC"]
]
];
$currencyRates = $this->currencyRatesRepository->findByCriteria($criteria);
$response = [
'status' => true,
'data' => $currencyRates,
];
} catch (ApiErrorException $e) {
$response['message'] = $e->getMessage();
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
}