71 lines
2.2 KiB
PHP
71 lines
2.2 KiB
PHP
<?php
|
|
|
|
namespace App\Domains\Prop\Controllers;
|
|
|
|
use App\Domains\Prop\Models\Prop;
|
|
use App\Domains\Prop\Requests\StorePropRequest;
|
|
use App\Domains\Prop\Requests\UpdatePropRequest;
|
|
use App\Domains\Prop\Resources\PropResource;
|
|
use App\Domains\Prop\Support\PropableModels;
|
|
use App\Http\Controllers\Controller;
|
|
use Illuminate\Http\JsonResponse;
|
|
use Illuminate\Http\Response;
|
|
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
|
|
|
class PropController extends Controller
|
|
{
|
|
public function index(string $propableType): JsonResponse
|
|
{
|
|
$modelClass = PropableModels::resolveOrFail($propableType);
|
|
|
|
return PropResource::collection(
|
|
Prop::query()->forModel($modelClass)->latest()->get()
|
|
)->response();
|
|
}
|
|
|
|
public function store(StorePropRequest $request, string $propableType): JsonResponse
|
|
{
|
|
$modelClass = PropableModels::resolveOrFail($propableType);
|
|
|
|
/** @var Prop $prop */
|
|
$prop = $modelClass::createProp($request->validated());
|
|
|
|
return PropResource::make($prop)->response()->setStatusCode(201);
|
|
}
|
|
|
|
public function show(string $propableType, Prop $prop): PropResource
|
|
{
|
|
$modelClass = PropableModels::resolveOrFail($propableType);
|
|
$prop = $this->resolveScopedProp($prop, $modelClass);
|
|
|
|
return PropResource::make($prop);
|
|
}
|
|
|
|
public function update(UpdatePropRequest $request, string $propableType, Prop $prop): PropResource
|
|
{
|
|
$modelClass = PropableModels::resolveOrFail($propableType);
|
|
$prop = $this->resolveScopedProp($prop, $modelClass);
|
|
$prop->update($request->validated());
|
|
|
|
return PropResource::make($prop);
|
|
}
|
|
|
|
public function destroy(string $propableType, Prop $prop): Response
|
|
{
|
|
$modelClass = PropableModels::resolveOrFail($propableType);
|
|
$prop = $this->resolveScopedProp($prop, $modelClass);
|
|
$prop->delete();
|
|
|
|
return response()->noContent();
|
|
}
|
|
|
|
protected function resolveScopedProp(Prop $prop, string $modelClass): Prop
|
|
{
|
|
if ($prop->propable_type !== $modelClass) {
|
|
throw new NotFoundHttpException('Prop not found for the given model type.');
|
|
}
|
|
|
|
return $prop;
|
|
}
|
|
}
|