where('tenant_codigo', $tenant->codigo) ->with('options') ->latest(); return AttributeResource::collection($query->paginateFromRequest())->response(); } public function store(StoreAttributeRequest $request, Tenant $tenant): JsonResponse { $attribute = ProductService::createAttribute($tenant, $request->validated()); return AttributeResource::make($attribute)->response()->setStatusCode(201); } public function show(Tenant $tenant, Attribute $attribute): AttributeResource { $attribute = $this->resolveScopedAttribute($tenant, $attribute); return AttributeResource::make($attribute->load('options')); } public function update(UpdateAttributeRequest $request, Tenant $tenant, Attribute $attribute): AttributeResource { $attribute = $this->resolveScopedAttribute($tenant, $attribute); $attribute = ProductService::updateAttribute($attribute, $request->validated()); return AttributeResource::make($attribute); } public function destroy(Tenant $tenant, Attribute $attribute): Response { $attribute = $this->resolveScopedAttribute($tenant, $attribute); ProductService::deleteAttribute($attribute); return response()->noContent(); } protected function resolveScopedAttribute(Tenant $tenant, Attribute $attribute): Attribute { if ($attribute->tenant_codigo !== $tenant->codigo) { throw new NotFoundHttpException('Attribute not found for tenant.'); } return $attribute; } }