model = $model; } public function index(Request $request): JsonResponse { $filters = collect($request->has('filters') ? json_decode($request->get('filters'), true) : [])->filter(function($val) {return $val;}); $query = $this->model->query(); $service = FiltersService::getService('objects'); $service->applyFilters($query, $filters); $paginator = $query->paginate(config('app.pagination_limit')); return fractal($paginator, new ObjectTransformer())->respond(); } public function show($id): JsonResponse { $model = $this->model->byUuid($id)->firstOrFail(); return fractal($model, new ObjectTransformer())->respond(); } public function store(Request $request): JsonResponse { $this->validate($request, [ 'type' => 'required', 'properties' => 'required|array' ]); $objectType = ObjectType::byUuidOrName($request->get('type'))->firstOrFail(); $model = $objectType->objects()->create($request->only('name') + ['owner_id' => $request->user()->id]); $model->setValues($request->get('properties')); if ($objectType->name === 'product') $model->setValue('specification-holder', $request->user()->selectedMember->company->uuid ?? null); return fractal($model, new ObjectTransformer())->respond(201); } public function move(Request $request, $id): JsonResponse { $model = $this->model->byUuid($id)->firstOrFail(); if (($type = $request->get('model_type')) && ($className = Relation::$morphMap[$type] ?? null) && ($id = $request->get('model_id'))) { if ($related = $className::byUuid($id)->first()) $related->moveObject($model, $request->get('ord'), $request->get('group')); } return fractal($model, new ObjectTransformer())->respond(); } public function update(Request $request, $uuid): JsonResponse { $model = $this->model->byUuid($uuid)->firstOrFail(); $this->validate($request, [ 'properties' => 'required|array' ]); $model->setValues($request->get('properties')); $model->update($request->only('name')); return fractal($model->fresh(), new ObjectTransformer())->respond(); } public function destroy(Request $request, $uuid): JsonResponse { $model = $this->model->byUuid($uuid)->firstOrFail(); $model->delete(); return response()->json(null, 204); } }