Feat: Adds multi currency support (#88)
This commit is contained in:
@@ -17,16 +17,14 @@ class DashboardController extends Controller
|
||||
$user = $request->user()->load(['portfolios', 'holdings', 'transactions']);
|
||||
|
||||
// get portfolio metrics
|
||||
$metrics = cache()->remember(
|
||||
$metrics = cache()->tags(['metrics-'.$user->id])->remember(
|
||||
'dashboard-metrics-'.$user->id,
|
||||
10,
|
||||
function () {
|
||||
return
|
||||
Holding::query()
|
||||
->myHoldings()
|
||||
->withoutWishlists()
|
||||
->withPortfolioMetrics()
|
||||
->first();
|
||||
return Holding::query()
|
||||
->myHoldings()
|
||||
->withoutWishlists()
|
||||
->getPortfolioMetrics();
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@@ -21,9 +21,9 @@ class HoldingController extends Controller
|
||||
$query->where('transactions.symbol', $symbol);
|
||||
},
|
||||
])
|
||||
->symbol($symbol)
|
||||
->portfolio($portfolio->id)
|
||||
->firstOrFail();
|
||||
->symbol($symbol)
|
||||
->portfolio($portfolio->id)
|
||||
->firstOrFail();
|
||||
|
||||
$formattedTransactions = $holding->getFormattedTransactions();
|
||||
|
||||
|
||||
@@ -29,14 +29,13 @@ class PortfolioController extends Controller
|
||||
$portfolio->load(['transactions', 'holdings']);
|
||||
|
||||
// get portfolio metrics
|
||||
$metrics = cache()->remember(
|
||||
$metrics = cache()->tags(['metrics-'.$request->user()->id])->remember(
|
||||
'portfolio-metrics-'.$portfolio->id,
|
||||
60,
|
||||
function () use ($portfolio) {
|
||||
return Holding::query()
|
||||
->portfolio($portfolio->id)
|
||||
->withPortfolioMetrics()
|
||||
->first();
|
||||
->getPortfolioMetrics();
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Number;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Foundation\Events\LocaleUpdated;
|
||||
|
||||
class LocalizationMiddleware
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle(Request $request, Closure $next)
|
||||
{
|
||||
if (Auth::check()) {
|
||||
|
||||
$locale = auth()->user()->getLocale();
|
||||
|
||||
config(['app.locale' => $locale]);
|
||||
app('translator')->setLocale(Str::before($locale, '_'));
|
||||
app('events')->dispatch(new LocaleUpdated($locale));
|
||||
|
||||
Number::useLocale($locale);
|
||||
Number::useCurrency(auth()->user()->getCurrency());
|
||||
}
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class SetLocale
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle(Request $request, Closure $next)
|
||||
{
|
||||
if (! session()->has('locale')) {
|
||||
session()->put('locale', $request->getPreferredLanguage(
|
||||
config('app.available_locales')
|
||||
));
|
||||
}
|
||||
|
||||
app()->setLocale(session('locale'));
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
@@ -30,11 +30,11 @@ class TransactionRequest extends FormRequest
|
||||
'portfolio_id' => ['required', 'exists:portfolios,id'],
|
||||
'symbol' => ['required', 'string', new SymbolValidationRule],
|
||||
'transaction_type' => ['required', 'string', 'in:BUY,SELL'],
|
||||
'date' => ['required', 'date_format:Y-m-d', 'before_or_equal:'.now()->format('Y-m-d')],
|
||||
'date' => ['required', 'date_format:Y-m-d', 'before_or_equal:'.now()->toDateString()],
|
||||
'quantity' => [
|
||||
'required',
|
||||
'numeric',
|
||||
'min:0',
|
||||
'gt:0',
|
||||
new QuantityValidationRule(
|
||||
$this->input('portfolio'),
|
||||
$this->requestOrModelValue('symbol', 'transaction'),
|
||||
|
||||
Reference in New Issue
Block a user