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; } }