74d2e3e602
- Added metadata to the responses, including timestamps and the time since the last update, improving data context for users. - Enhanced method descriptions with relevant emojis for better readability and understanding. - Refactored response handling to ensure consistent JSON structure across all rate retrieval methods. - These changes improve the clarity and usability of the API, providing users with more informative responses.
184 lines
6.5 KiB
PHP
Executable File
184 lines
6.5 KiB
PHP
Executable File
<?php
|
||
|
||
namespace App\Http\Controllers;
|
||
|
||
use App\Jobs\FetchCurrencyRates;
|
||
use App\Jobs\FetchGoldRates;
|
||
use App\Jobs\MergeCurrencyAndGoldRates;
|
||
use Illuminate\Support\Facades\Storage;
|
||
|
||
/**
|
||
* Class CurrencyController
|
||
*
|
||
* This controller handles the fetching and returning of currency and gold rates.
|
||
*/
|
||
class CurrencyController extends Controller
|
||
{
|
||
/**
|
||
* ⚙️ Dispatches all jobs to fetch currency and gold rates synchronously.
|
||
*
|
||
* @return \Illuminate\Http\JsonResponse
|
||
*/
|
||
public function runAllFetchs()
|
||
{
|
||
try {
|
||
FetchCurrencyRates::dispatchSync();
|
||
FetchGoldRates::dispatchSync();
|
||
MergeCurrencyAndGoldRates::dispatchSync();
|
||
|
||
return response()->json([
|
||
'status' => 'success',
|
||
'message' => 'All currency and gold rates have been successfully updated'
|
||
]);
|
||
} catch (\Exception $e) {
|
||
return response()->json([
|
||
'status' => 'error',
|
||
'message' => 'An error occurred while updating rates: ' . $e->getMessage()
|
||
], 500);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 🪙 💵 Retrieves all gold and currency rates
|
||
*
|
||
* @return \Illuminate\Http\JsonResponse
|
||
*/
|
||
public function getAllRates()
|
||
{
|
||
// JSON dosyasından oku
|
||
$jsonFile = 'merged/rates.json';
|
||
if (Storage::exists($jsonFile)) {
|
||
$data = json_decode(Storage::get($jsonFile), true);
|
||
$currentDate = now(); // Şu anki tarih
|
||
$updateDate = isset($data['Update_Date']) ? \Carbon\Carbon::parse($data['Update_Date']) : null;
|
||
|
||
if ($updateDate) {
|
||
$minutesAgo = round($currentDate->diffInMinutes($updateDate), 2); // Kaç dakika önce alındığı
|
||
$metaData = [ // Tarih bilgileri için alt dizi
|
||
'Minutes_Ago' => $minutesAgo,
|
||
'Current_Date' => $currentDate->toDateTimeString(),
|
||
'Update_Date' => $updateDate->toDateTimeString(), // Update_Date burada kalacak
|
||
];
|
||
unset($data['Update_Date']); // Rates içerisindeki Update_Date elemanını kaldır
|
||
$data = [
|
||
'Meta_Data' => $metaData, // Tarih bilgileri alt dizisi
|
||
'Rates' => $data, // Kur bilgileri alt dizisi
|
||
];
|
||
}
|
||
|
||
return response()->json($data);
|
||
}
|
||
|
||
return response()->json(['error' => 'Veri bulunamadı'], 404);
|
||
}
|
||
|
||
/**
|
||
* 💵 Retrieves the current currency rates
|
||
*
|
||
* @return \Illuminate\Http\JsonResponse
|
||
*/
|
||
public function getCurrentRates()
|
||
{
|
||
// JSON dosyasından oku
|
||
$jsonFile = 'currency/today.json';
|
||
if (Storage::exists($jsonFile)) {
|
||
$data = json_decode(Storage::get($jsonFile), true);
|
||
$currentDate = now(); // Şu anki tarih
|
||
$updateDate = isset($data['Update_Date']) ? \Carbon\Carbon::parse($data['Update_Date']) : null;
|
||
|
||
if ($updateDate) {
|
||
$minutesAgo = round($currentDate->diffInMinutes($updateDate), 2); // Kaç dakika önce alındığı
|
||
$metaData = [ // Tarih bilgileri için alt dizi
|
||
'Minutes_Ago' => $minutesAgo,
|
||
'Current_Date' => $currentDate->toDateTimeString(),
|
||
'Update_Date' => $updateDate->toDateTimeString(), // Update_Date burada kalacak
|
||
];
|
||
unset($data['Update_Date']); // Rates içerisindeki Update_Date elemanını kaldır
|
||
$data = [
|
||
'Meta_Data' => $metaData, // Tarih bilgileri alt dizisi
|
||
'Rates' => $data, // Kur bilgileri alt dizisi
|
||
];
|
||
}
|
||
|
||
return response()->json($data);
|
||
}
|
||
|
||
return response()->json(['error' => 'Veri bulunamadı'], 404);
|
||
}
|
||
|
||
/**
|
||
* 🪙 Retrieves the current gold rates
|
||
*
|
||
* @return \Illuminate\Http\JsonResponse
|
||
*/
|
||
public function getGoldRates()
|
||
{
|
||
// JSON dosyasından oku
|
||
$jsonFile = 'gold/today.json';
|
||
if (Storage::exists($jsonFile)) {
|
||
$data = json_decode(Storage::get($jsonFile), true);
|
||
$currentDate = now(); // Şu anki tarih
|
||
$updateDate = isset($data['Update_Date']) ? \Carbon\Carbon::parse($data['Update_Date']) : null;
|
||
|
||
if ($updateDate) {
|
||
$minutesAgo = round($currentDate->diffInMinutes($updateDate), 2); // Kaç dakika önce alındığı
|
||
$metaData = [ // Tarih bilgileri için alt dizi
|
||
'Minutes_Ago' => $minutesAgo,
|
||
'Current_Date' => $currentDate->toDateTimeString(),
|
||
'Update_Date' => $updateDate->toDateTimeString(), // Update_Date burada kalacak
|
||
];
|
||
unset($data['Update_Date']); // Rates içerisindeki Update_Date elemanını kaldır
|
||
$data = [
|
||
'Meta_Data' => $metaData, // Tarih bilgileri alt dizisi
|
||
'Rates' => $data, // Kur bilgileri alt dizisi
|
||
];
|
||
}
|
||
|
||
return response()->json($data);
|
||
}
|
||
|
||
return response()->json(['error' => 'Veri bulunamadı'], 404);
|
||
}
|
||
|
||
/**
|
||
* 🟰 💵 Retrieves the currency rate by its name
|
||
*
|
||
* @param string $currencyName
|
||
* @return \Illuminate\Http\JsonResponse
|
||
*/
|
||
public function getCurrencyRateByName($currencyName)
|
||
{
|
||
// JSON dosyasından oku
|
||
$jsonFile = 'currency/today.json';
|
||
if (Storage::exists($jsonFile)) {
|
||
$data = json_decode(Storage::get($jsonFile), true);
|
||
if (isset($data[$currencyName])) {
|
||
return response()->json([$currencyName => $data[$currencyName]]);
|
||
}
|
||
return response()->json(['error' => 'Currency not found'], 404);
|
||
}
|
||
|
||
return response()->json(['error' => 'Data not found'], 404);
|
||
}
|
||
|
||
/**
|
||
* 🟰 🪙 Retrieves the gold rate by its name
|
||
*
|
||
* @param string $goldName
|
||
* @return \Illuminate\Http\JsonResponse
|
||
*/
|
||
public function getGoldRateByName($goldName)
|
||
{
|
||
// JSON dosyasından oku
|
||
$jsonFile = 'gold/today.json';
|
||
if (Storage::exists($jsonFile)) {
|
||
$data = json_decode(Storage::get($jsonFile), true);
|
||
if (isset($data[$goldName])) {
|
||
return response()->json([$goldName => $data[$goldName]]);
|
||
}
|
||
return response()->json(['error' => 'Currency not found'], 404);
|
||
}
|
||
|
||
return response()->json(['error' => 'Data not found'], 404);
|
||
}
|
||
} |