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

58 lines
1.5 KiB
PHP
Raw Normal View History

2025-01-23 22:47:16 -06:00
<?php
2025-01-24 19:24:16 -06:00
declare(strict_types=1);
2025-01-23 22:47:16 -06:00
namespace App\Http\ApiControllers;
use App\Models\Portfolio;
2025-01-24 22:45:28 -06:00
use Illuminate\Support\Facades\Gate;
2025-01-24 19:24:16 -06:00
use HackerEsq\FilterModels\FilterModels;
2025-01-23 22:47:16 -06:00
use App\Http\Resources\PortfolioResource;
2025-01-26 22:56:05 -06:00
use App\Http\Requests\PortfolioRequest;
2025-01-23 22:47:16 -06:00
use App\Http\ApiControllers\Controller as ApiController;
class PortfolioController 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(Portfolio::query());
$filters->setScopes(['myPortfolios']);
$filters->setEagerRelations(['users', 'transactions', 'holdings']);
2025-01-24 22:45:28 -06:00
$filters->setFilterableRelations(['holdings.symbol']);
2025-01-24 19:24:16 -06:00
$filters->setSearchableColumns(['title', 'notes']);
return PortfolioResource::collection($filters->paginated());
2025-01-23 22:47:16 -06:00
}
2025-01-24 22:45:28 -06:00
2025-01-26 22:56:05 -06:00
public function store(PortfolioRequest $request)
2025-01-24 22:45:28 -06:00
{
$portfolio = Portfolio::create($request->validated());
return PortfolioResource::make($portfolio);
}
public function show(Portfolio $portfolio)
{
Gate::authorize('readOnly', $portfolio);
return PortfolioResource::make($portfolio);
}
2025-01-26 22:56:05 -06:00
public function update(PortfolioRequest $request, Portfolio $portfolio)
2025-01-24 22:45:28 -06:00
{
Gate::authorize('fullAccess', $portfolio);
$portfolio->update($request->validated());
return PortfolioResource::make($portfolio);
}
public function destroy(Portfolio $portfolio)
{
Gate::authorize('fullAccess', $portfolio);
2025-01-26 22:56:05 -06:00
$portfolio->delete();
2025-01-24 22:45:28 -06:00
return response()->noContent();
}
2025-01-23 22:47:16 -06:00
}