/** * @return void */ private function refreshUsersAttributes() { $expectedAttributes = [self::ATTRIBUTE_NAME, self::ATTRIBUTE_AGE]; $actualAttributes = $this->getAttributesNames($this->client->getUsersAttributes()); foreach ($actualAttributes as $attribute) { if (!in_array($attribute, $expectedAttributes)) { $this->client->deleteUsersAttribute($attribute); } } if (!in_array(self::ATTRIBUTE_NAME, $actualAttributes)) { $this->client->addUsersAttribute(self::ATTRIBUTE_NAME, DataType::TEXT, 'en', MetaType::TITLE); } if (!in_array(self::ATTRIBUTE_AGE, $actualAttributes)) { $this->client->addUsersAttribute(self::ATTRIBUTE_AGE, DataType::INTEGER); } }
/** * set all attributes in recommender by manifest file * * TODO: do not set existing attributes * TODO: set metatypes * */ public function setAttributes(DataApi\Client $client) { if (!is_null($this->manifest)) { $usersAttributes = $client->getUsersAttributes(); $usersAttributesNames = array_map(function ($attr) { return $attr['name']; }, $usersAttributes['attributes']); foreach ($this->manifest->getColumns() as $attribute) { $pk = $this->manifest->getPrimaryKey()[0]; if ($attribute != $pk && !in_array($attribute, $usersAttributesNames)) { $client->addUsersAttribute($attribute, DataApi\DataType::TEXT); } } } return $this; }