Files
finance/app/Http/Controllers/CurrencyController.php
T
Ümit Tunç 0ab592ecbc Refactor CurrencyController to enhance API documentation and response messages
- Updated method documentation to clearly describe the fetching of currency, crypto, and gold rates.
- Improved response messages to include all relevant rates (currency, crypto, and gold) for better clarity.
- Added grouping and subgroup annotations to API methods for improved organization in documentation.
- Enhanced consistency in method descriptions across the controller.

These changes collectively improve the clarity and usability of the CurrencyController in the Truncgil Finance application.
2025-01-21 22:50:30 +03:00

260 lines
8.6 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\FetchCryptoCurrencyRates;
use App\Jobs\MergeCurrencyAndGoldRates;
use Illuminate\Support\Facades\Storage;
use App\Http\Controllers\Controller;
/**
* Class CurrencyController
*
* This controller handles the fetching and returning of currency and gold rates.
*/
class CurrencyController extends Controller
{
/**
* Synchronously fetch all currency, crypto and gold rates.
* Rate limited to 2 requests per 30 seconds.
* @group Cron Job
*
* @return \Illuminate\Http\JsonResponse
*/
public function runAllFetchs()
{
try {
FetchCurrencyRates::dispatchSync();
FetchGoldRates::dispatchSync();
FetchCryptoCurrencyRates::dispatchSync();
MergeCurrencyAndGoldRates::dispatchSync();
return response()->json([
'status' => 'success',
'message' => 'All currency, crypto and gold rates have been successfully updated'
]);
} catch (\Exception $e) {
return response()->json([
'status' => 'error',
'message' => 'Kurlar güncellenirken bir hata oluştu: ' . $e->getMessage()
], 429);
}
}
/**
* Get all currency, crypto and gold rates.
* @group All Rates
* @subgroup Fetch Rates
*
* @return \Illuminate\Http\JsonResponse
*/
public function getAllRates()
{
$jsonFile = 'merged/rates.json';
if (Storage::exists($jsonFile)) {
$data = json_decode(Storage::get($jsonFile), true);
$currentDate = now();
$updateDate = isset($data['Update_Date']) ? \Carbon\Carbon::parse($data['Update_Date']) : null;
if ($updateDate) {
$minutesAgo = round($currentDate->diffInMinutes($updateDate), 2);
$metaData = [
'Minutes_Ago' => $minutesAgo,
'Current_Date' => $currentDate->toDateTimeString(),
'Update_Date' => $updateDate->toDateTimeString(),
];
unset($data['Update_Date']);
$data = [
'Meta_Data' => $metaData,
'Rates' => $data
];
return response()->json($data);
}
}
return response()->json(['error' => 'Data not found'], 404);
}
/**
* Get current currency rates.
* @group 💵 Currency
* @subgroup Fetch 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' => 'Data not found'], 404);
}
/**
* Get current gold rates.
* @group 🪙 Gold
* @subgroup Fetch 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' => 'Data not found'], 404);
}
/**
* Get current crypto rates.
* @group ₿ Crypto
* @subgroup Fetch Rates
*
* @return \Illuminate\Http\JsonResponse
*/
public function getCryptoCurrencyRates()
{
$jsonFile = 'crypto/today.json';
if (Storage::exists($jsonFile)) {
$data = json_decode(Storage::get($jsonFile), true);
$currentDate = now();
$updateDate = isset($data['Update_Date']) ? \Carbon\Carbon::parse($data['Update_Date']) : null;
if ($updateDate) {
$minutesAgo = round($currentDate->diffInMinutes($updateDate), 2);
$metaData = [
'Minutes_Ago' => $minutesAgo,
'Current_Date' => $currentDate->toDateTimeString(),
'Update_Date' => $updateDate->toDateTimeString(),
];
unset($data['Update_Date']);
$data = [
'Meta_Data' => $metaData,
'Rates' => $data,
];
}
return response()->json($data);
}
return response()->json(['error' => 'Data not found'], 404);
}
/**
* Get currency rate by name.
* @group 💵 Currency
* @subgroup Fetch Rates
*
* @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);
}
/**
* Get gold rate by name.
* @group 🪙 Gold
* @subgroup Fetch Rates
*
* @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);
}
/**
* Get crypto rate by name.
* @group ₿ Crypto
* @subgroup Fetch Rates
*
* @param string $cryptoCurrencyName
* @return \Illuminate\Http\JsonResponse
*/
public function getCryptoCurrencyRateByName($cryptoCurrencyName)
{
$jsonFile = 'crypto/today.json';
if (Storage::exists($jsonFile)) {
$data = json_decode(Storage::get($jsonFile), true);
if (isset($data[$cryptoCurrencyName])) {
return response()->json([$cryptoCurrencyName => $data[$cryptoCurrencyName]]);
}
return response()->json(['error' => 'Cryptocurrency not found'], 404);
}
return response()->json(['error' => 'Data not found'], 404);
}
}