This commit is contained in:
hackerESQ
2025-01-26 22:56:05 -06:00
parent 169eabd800
commit ea4602abc7
7 changed files with 157 additions and 37 deletions
@@ -8,8 +8,7 @@ use App\Models\Portfolio;
use Illuminate\Support\Facades\Gate;
use HackerEsq\FilterModels\FilterModels;
use App\Http\Resources\PortfolioResource;
use App\Http\Requests\StorePortfolioRequest;
use App\Http\Requests\UpdatePortfolioRequest;
use App\Http\Requests\PortfolioRequest;
use App\Http\ApiControllers\Controller as ApiController;
class PortfolioController extends ApiController
@@ -25,7 +24,7 @@ class PortfolioController extends ApiController
return PortfolioResource::collection($filters->paginated());
}
public function store(StorePortfolioRequest $request)
public function store(PortfolioRequest $request)
{
$portfolio = Portfolio::create($request->validated());
@@ -39,7 +38,7 @@ class PortfolioController extends ApiController
return PortfolioResource::make($portfolio);
}
public function update(UpdatePortfolioRequest $request, Portfolio $portfolio)
public function update(PortfolioRequest $request, Portfolio $portfolio)
{
Gate::authorize('fullAccess', $portfolio);
@@ -52,6 +51,8 @@ class PortfolioController extends ApiController
{
Gate::authorize('fullAccess', $portfolio);
$portfolio->delete();
return response()->noContent();
}
}
@@ -4,7 +4,9 @@ namespace App\Http\ApiControllers;
use App\Models\Transaction;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Gate;
use HackerEsq\FilterModels\FilterModels;
use App\Http\Requests\TransactionRequest;
use App\Http\Resources\TransactionResource;
use App\Http\ApiControllers\Controller as ApiController;
@@ -19,4 +21,36 @@ class TransactionController extends ApiController
return TransactionResource::collection($filters->paginated());
}
public function store(TransactionRequest $request)
{
$transaction = Transaction::create($request->validated());
return TransactionResource::make($transaction);
}
public function show(Transaction $transaction)
{
Gate::authorize('readOnly', $transaction);
return TransactionResource::make($transaction);
}
public function update(TransactionRequest $request, Transaction $transaction)
{
Gate::authorize('fullAccess', $transaction);
$transaction->update($request->validated());
return TransactionResource::make($transaction);
}
public function destroy(Transaction $transaction)
{
Gate::authorize('fullAccess', $transaction);
$transaction->delete();
return response()->noContent();
}
}
+2 -3
View File
@@ -5,6 +5,7 @@ namespace App\Http\Controllers;
use App\Models\Holding;
use App\Models\Portfolio;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Gate;
class PortfolioController extends Controller
{
@@ -22,9 +23,7 @@ class PortfolioController extends Controller
*/
public function show(Request $request, Portfolio $portfolio)
{
if ($request->user()->cannot('readOnly', $portfolio)) {
abort(403);
}
Gate::authorize('readOnly', $portfolio);
$portfolio->load(['transactions', 'holdings']);
@@ -4,7 +4,7 @@ namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StorePortfolioRequest extends FormRequest
class PortfolioRequest extends FormRequest
{
/**
@@ -14,10 +14,17 @@ class StorePortfolioRequest extends FormRequest
*/
public function rules(): array
{
return [
'title' => ['required', 'string', 'max:255'],
$rules = [
'title' => ['required', 'string', 'min:5', 'max:255'],
'notes' => ['sometimes', 'nullable', 'string'],
'wishlist' => ['sometimes', 'nullable', 'boolean'],
];
if (!is_null($this->portfolio)) {
$rules['title'][0] = 'sometimes';
}
return $rules;
}
}
@@ -4,7 +4,7 @@ namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class UpdatePortfolioRequest extends FormRequest
class TransactionRequest extends FormRequest
{
/**
@@ -14,10 +14,17 @@ class UpdatePortfolioRequest extends FormRequest
*/
public function rules(): array
{
return [
'title' => ['sometimes', 'string', 'max:255'],
$rules = [
'title' => ['required', 'string', 'min:5', 'max:255'],
'notes' => ['sometimes', 'nullable', 'string'],
'wishlist' => ['sometimes', 'nullable', 'boolean'],
];
if (!is_null($this->portfolio)) {
$rules['title'][0] = 'sometimes';
}
return $rules;
}
}