getOne('SELECT identity, raw, generated, datatype FROM data WHERE identity = :id and isActive = 1 LIMIT 1', [ ':id' => $id ]); if ($data !== null) { $model = new DataModel($data->identity, $data->datatype, $data->raw, $data->generated); $model->setActive(true); return $model; } return null; } public function updateData(DataModel $model): bool { if ($model->getId() === '') { return $this->insertData($model); } return DatabaseHandler::get()->execute( "UPDATE data SET identity=:id, isActive=:isActive, generated=:gen, raw=:raw, datatype=:dt WHERE identity=:id", [ ':id' => $model->getId(), ':isActive' => $model->getActive(), ':gen' => $model->getGenerated(), ':raw' => $model->getRaw(), ':dt' => $model->getType() ] ); } public function insertData(DataModel $model): bool { $this->validateModel($model); return DatabaseHandler::get()->execute( "INSERT INTO data (identity, isActive, generated, raw, datatype) VALUES (:id, :isActive, :gen, :raw, :dt)", [ ':id' => $model->getId(), ':isActive' => $model->getActive(), ':gen' => $model->getGenerated(), ':raw' => $model->getRaw(), ':dt' => $model->getType() ] ); } private function validateModel(DataModel $model): void { if ($model->getId() === '') { $model->setId($this->generateID()); } if (!$model->validate()) { $id = htmlspecialchars($model->getId()); throw new RuntimeException("DataModel with id: \"$id\" is invalid!"); } } private function generateID(string $id = ''): string { if ($id === '') { $id = bin2hex(random_bytes(16)); } return $id; } }