From dd21227f8f4e7c703ed3b9c96b14fac7fafc9149 Mon Sep 17 00:00:00 2001 From: hackerESQ Date: Thu, 10 Apr 2025 21:24:44 -0500 Subject: [PATCH] Feat: Adds multi currency support to API (#90) --- app/Http/ApiControllers/TransactionController.php | 1 + app/Http/Requests/TransactionRequest.php | 2 ++ app/Http/Resources/HoldingResource.php | 1 + app/Http/Resources/TransactionResource.php | 1 + app/Http/Resources/UserResource.php | 4 ++++ 5 files changed, 9 insertions(+) diff --git a/app/Http/ApiControllers/TransactionController.php b/app/Http/ApiControllers/TransactionController.php index aa9d12a..5b108bb 100644 --- a/app/Http/ApiControllers/TransactionController.php +++ b/app/Http/ApiControllers/TransactionController.php @@ -18,6 +18,7 @@ class TransactionController extends ApiController $filters->setQuery(Transaction::query()); $filters->setScopes(['myTransactions']); + $filters->setEagerRelations(['market_data']); $filters->setSearchableColumns(['symbol']); return TransactionResource::collection($filters->paginated()); diff --git a/app/Http/Requests/TransactionRequest.php b/app/Http/Requests/TransactionRequest.php index 847a1ef..4eb7cdd 100644 --- a/app/Http/Requests/TransactionRequest.php +++ b/app/Http/Requests/TransactionRequest.php @@ -42,6 +42,7 @@ class TransactionRequest extends FormRequest $this->requestOrModelValue('date', 'transaction') ), ], + 'currency' => ['required', 'exists:currencies,currency'], 'cost_basis' => ['exclude_if:transaction_type,SELL', 'min:0', 'numeric'], 'sale_price' => ['exclude_if:transaction_type,BUY', 'min:0', 'numeric'], ]; @@ -50,6 +51,7 @@ class TransactionRequest extends FormRequest $rules['portfolio_id'][0] = 'sometimes'; $rules['symbol'][0] = 'sometimes'; $rules['transaction_type'][0] = 'sometimes'; + $rules['currency'][0] = 'sometimes'; $rules['date'][0] = 'sometimes'; $rules['quantity'][0] = 'sometimes'; diff --git a/app/Http/Resources/HoldingResource.php b/app/Http/Resources/HoldingResource.php index a11b0cc..92dfd9d 100644 --- a/app/Http/Resources/HoldingResource.php +++ b/app/Http/Resources/HoldingResource.php @@ -21,6 +21,7 @@ class HoldingResource extends JsonResource 'portfolio_id' => $this->portfolio_id, 'symbol' => $this->symbol, 'quantity' => $this->quantity, + 'currency' => $this->market_data->currency, 'reinvest_dividends' => $this->reinvest_dividends, 'average_cost_basis' => $this->average_cost_basis, 'total_cost_basis' => $this->total_cost_basis, diff --git a/app/Http/Resources/TransactionResource.php b/app/Http/Resources/TransactionResource.php index 49ec5ad..ccdc06a 100644 --- a/app/Http/Resources/TransactionResource.php +++ b/app/Http/Resources/TransactionResource.php @@ -22,6 +22,7 @@ class TransactionResource extends JsonResource 'portfolio_id' => $this->portfolio_id, 'transaction_type' => $this->transaction_type, 'quantity' => $this->quantity, + 'currency' => $this->market_data->currency, 'cost_basis' => $this->cost_basis, 'sale_price' => $this->sale_price, 'split' => $this->split, diff --git a/app/Http/Resources/UserResource.php b/app/Http/Resources/UserResource.php index 4896aa5..b4e663c 100644 --- a/app/Http/Resources/UserResource.php +++ b/app/Http/Resources/UserResource.php @@ -22,6 +22,10 @@ class UserResource extends JsonResource 'name' => $this->name, 'email' => $this->email, 'profile_photo_url' => $this->profile_photo_url, + 'options' => [ + 'display_currency' => $this->getCurrency(), + 'locale' => $this->getLocale(), + ], 'created_at' => $this->created_at, 'updated_at' => $this->updated_at, ];