Files
finance/app/Http/Controllers/CurrencyController.php
T
Ümit Tunç 74d2e3e602 - Updated CurrencyController to enhance API responses for currency and gold rates.
- 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.
2025-01-21 11:06:42 +03:00

184 lines
6.5 KiB
PHP
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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);
}
}