Files

50 lines
1.3 KiB
PHP
Raw Permalink Normal View History

2025-01-23 22:47:16 -06:00
<?php
2025-01-28 17:33:54 -06:00
declare(strict_types=1);
2025-01-23 22:47:16 -06:00
namespace App\Http\ApiControllers;
2025-01-28 17:14:49 -06:00
use App\Http\ApiControllers\Controller as ApiController;
2025-01-27 20:26:09 -06:00
use App\Http\Requests\HoldingRequest;
2025-01-24 19:24:16 -06:00
use App\Http\Resources\HoldingResource;
2025-01-28 17:14:49 -06:00
use App\Models\Holding;
use App\Models\Portfolio;
2025-01-24 19:24:16 -06:00
use HackerEsq\FilterModels\FilterModels;
2025-01-28 17:14:49 -06:00
use Illuminate\Support\Facades\Gate;
2025-01-23 22:47:16 -06:00
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-28 17:14:49 -06:00
}