feat(app framework): Add typed DB entities based on PHP reflection

Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
enhancement/typed-db-entity
Christoph Wurst 1 year ago
parent 04f68622cc
commit ad7924f1fd
No known key found for this signature in database
GPG Key ID: CC42AC2A7F0E56D8

@ -34,6 +34,7 @@ return array(
'OCP\\AppFramework\\Db\\MultipleObjectsReturnedException' => $baseDir . '/lib/public/AppFramework/Db/MultipleObjectsReturnedException.php',
'OCP\\AppFramework\\Db\\QBMapper' => $baseDir . '/lib/public/AppFramework/Db/QBMapper.php',
'OCP\\AppFramework\\Db\\TTransactional' => $baseDir . '/lib/public/AppFramework/Db/TTransactional.php',
'OCP\\AppFramework\\Db\\TypedEntity' => $baseDir . '/lib/public/AppFramework/Db/TypedEntity.php',
'OCP\\AppFramework\\Http' => $baseDir . '/lib/public/AppFramework/Http.php',
'OCP\\AppFramework\\Http\\ContentSecurityPolicy' => $baseDir . '/lib/public/AppFramework/Http/ContentSecurityPolicy.php',
'OCP\\AppFramework\\Http\\DataDisplayResponse' => $baseDir . '/lib/public/AppFramework/Http/DataDisplayResponse.php',

@ -67,6 +67,7 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2
'OCP\\AppFramework\\Db\\MultipleObjectsReturnedException' => __DIR__ . '/../../..' . '/lib/public/AppFramework/Db/MultipleObjectsReturnedException.php',
'OCP\\AppFramework\\Db\\QBMapper' => __DIR__ . '/../../..' . '/lib/public/AppFramework/Db/QBMapper.php',
'OCP\\AppFramework\\Db\\TTransactional' => __DIR__ . '/../../..' . '/lib/public/AppFramework/Db/TTransactional.php',
'OCP\\AppFramework\\Db\\TypedEntity' => __DIR__ . '/../../..' . '/lib/public/AppFramework/Db/TypedEntity.php',
'OCP\\AppFramework\\Http' => __DIR__ . '/../../..' . '/lib/public/AppFramework/Http.php',
'OCP\\AppFramework\\Http\\ContentSecurityPolicy' => __DIR__ . '/../../..' . '/lib/public/AppFramework/Http/ContentSecurityPolicy.php',
'OCP\\AppFramework\\Http\\DataDisplayResponse' => __DIR__ . '/../../..' . '/lib/public/AppFramework/Http/DataDisplayResponse.php',

@ -0,0 +1,55 @@
<?php
declare(strict_types=1);
/*
* @copyright 2022 Christoph Wurst <christoph@winzerhof-wurst.at>
*
* @author 2022 Christoph Wurst <christoph@winzerhof-wurst.at>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
namespace OCP\AppFramework\Db;
use ReflectionClass;
class TypedEntity extends Entity {
public function __construct() {
$reflectedSelf = new ReflectionClass($this);
$fieldTypes = $this->getFieldTypes();
foreach ($reflectedSelf->getProperties() as $property) {
if (isset($fieldTypes[$property->getName()])) {
// Don't override
continue;
}
$propertyType = $property->getType();
if ($propertyType === null) {
// Can't derive
continue;
}
if (!$propertyType->isBuiltin()) {
// Complex type is not supported
continue;
}
$this->addType($property->getName(), $propertyType->getName());
}
}
}
Loading…
Cancel
Save