Files
investbrain/app/Http/ApiControllers/HoldingController.php
T

48 lines
1.3 KiB
PHP
Raw Normal View History

2025-01-23 22:47:16 -06:00
<?php
namespace App\Http\ApiControllers;
2025-01-24 19:24:16 -06:00
use App\Models\Holding;
2025-01-27 20:04:03 -06:00
use App\Models\Portfolio;
2025-01-23 22:47:16 -06:00
use Illuminate\Http\Request;
2025-01-27 20:26:09 -06:00
use Illuminate\Support\Facades\Gate;
use App\Http\Requests\HoldingRequest;
2025-01-24 19:24:16 -06:00
use App\Http\Resources\HoldingResource;
use HackerEsq\FilterModels\FilterModels;
2025-01-23 22:47:16 -06:00
use App\Http\ApiControllers\Controller as ApiController;
class HoldingController extends ApiController
{
2025-01-24 19:24:16 -06:00
public function index(FilterModels $filters)
2025-01-23 22:47:16 -06:00
{
2025-01-24 19:24:16 -06:00
$filters->setQuery(Holding::query());
$filters->setScopes(['myHoldings']);
$filters->setEagerRelations(['market_data', 'transactions']);
$filters->setSearchableColumns(['symbol']);
return HoldingResource::collection($filters->paginated());
2025-01-23 22:47:16 -06:00
}
2025-01-27 20:04:03 -06:00
public function show(Portfolio $portfolio, string $symbol)
{
2025-01-27 20:26:09 -06:00
Gate::authorize('readOnly', $portfolio);
$holding = $portfolio->holdings()->symbol($symbol)->firstOrFail();
return HoldingResource::make($holding);
2025-01-27 20:04:03 -06:00
}
2025-01-27 20:26:09 -06:00
public function update(HoldingRequest $request, Portfolio $portfolio, string $symbol)
2025-01-27 20:04:03 -06:00
{
2025-01-27 20:26:09 -06:00
Gate::authorize('fullAccess', $portfolio);
$holding = $portfolio->holdings()->symbol($symbol)->firstOrFail();
$holding->update($request->validated());
return HoldingResource::make($holding);
2025-01-27 20:04:03 -06:00
}
2025-01-23 22:47:16 -06:00
}