Visual Console Refactor: added DB fetching and fixed a context problem
Former-commit-id: 44889e60cb6f45ab8245da93746c4ca688de97a7
This commit is contained in:
parent
282a816c01
commit
f6f868ddfe
|
@ -10,10 +10,10 @@ abstract class Model
|
||||||
private $data;
|
private $data;
|
||||||
|
|
||||||
|
|
||||||
protected abstract function validateData(array $data): void;
|
abstract protected function validateData(array $data): void;
|
||||||
|
|
||||||
|
|
||||||
protected abstract function decode(array $data): array;
|
abstract protected function decode(array $data): array;
|
||||||
|
|
||||||
|
|
||||||
public function __construct(array $unknownData)
|
public function __construct(array $unknownData)
|
||||||
|
@ -23,6 +23,45 @@ abstract class Model
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instance the class with the input data.
|
||||||
|
*
|
||||||
|
* @param array $data Unknown data structure.
|
||||||
|
*
|
||||||
|
* @return self
|
||||||
|
*/
|
||||||
|
public static function fromArray(array $data): self
|
||||||
|
{
|
||||||
|
// The reserved word static refers to the invoked class at runtime.
|
||||||
|
return new static($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Obtain a data structure from the database using a filter.
|
||||||
|
*
|
||||||
|
* @param array $filter Filter to retrieve the modeled element.
|
||||||
|
*
|
||||||
|
* @return array The modeled element data structure stored into the DB.
|
||||||
|
* @throws \Exception When the data cannot be retrieved from the DB.
|
||||||
|
*/
|
||||||
|
abstract protected static function fetchDataFromDB(array $filter): array;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Obtain a model's instance from the database using a filter.
|
||||||
|
*
|
||||||
|
* @param array $filter Filter to retrieve the modeled element.
|
||||||
|
*
|
||||||
|
* @return self A modeled element's instance.
|
||||||
|
*/
|
||||||
|
public static function fromDB(array $filter): self
|
||||||
|
{
|
||||||
|
// The reserved word static refers to the invoked class at runtime.
|
||||||
|
return static::fromArray(static::fetchDataFromDB($filter));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the JSON representation of the given value.
|
* Returns the JSON representation of the given value.
|
||||||
*
|
*
|
||||||
|
@ -90,7 +129,7 @@ abstract class Model
|
||||||
*/
|
*/
|
||||||
protected static function parseIntOr($val, $def)
|
protected static function parseIntOr($val, $def)
|
||||||
{
|
{
|
||||||
return is_numeric($val) ? (int) $val : $def;
|
return (is_numeric($val) === true) ? (int) $val : $def;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -105,7 +144,7 @@ abstract class Model
|
||||||
protected static function issetInArray(array $val, array $keys)
|
protected static function issetInArray(array $val, array $keys)
|
||||||
{
|
{
|
||||||
foreach ($keys as $key => $value) {
|
foreach ($keys as $key => $value) {
|
||||||
if (isset($val[$value])) {
|
if (isset($val[$value]) === true) {
|
||||||
return $val[$value];
|
return $val[$value];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -142,4 +142,29 @@ final class Container extends Model
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Obtain a container data structure from the database using a filter.
|
||||||
|
*
|
||||||
|
* @param array $filter Filter of the Visual Console.
|
||||||
|
*
|
||||||
|
* @return self A Visual Console Container instance.
|
||||||
|
* @throws \Exception When the data cannot be retrieved from the DB.
|
||||||
|
*
|
||||||
|
* @override Model::fetchDataFromDB.
|
||||||
|
*/
|
||||||
|
public static function fetchDataFromDB(array $filter): self
|
||||||
|
{
|
||||||
|
// Due to this DB call, this function cannot be unit tested without
|
||||||
|
// a proper mock.
|
||||||
|
$row = \db_get_row_filter('tlayout', $filter);
|
||||||
|
|
||||||
|
if ($row === false) {
|
||||||
|
throw new \Exception('error fetching the data from the DB');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return a new instance.
|
||||||
|
return new self($row);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,19 +9,6 @@ class Item extends Model
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Instance the class with the input data.
|
|
||||||
*
|
|
||||||
* @param mixed $data
|
|
||||||
*
|
|
||||||
* @return self
|
|
||||||
*/
|
|
||||||
public static function fromArray(array $data): self
|
|
||||||
{
|
|
||||||
return new self($data);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Validate the input data.
|
* Validate the input data.
|
||||||
*
|
*
|
||||||
|
@ -264,4 +251,42 @@ class Item extends Model
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Obtain a vc item data structure from the database using a filter.
|
||||||
|
*
|
||||||
|
* @param array $filter Filter of the Visual Console Item.
|
||||||
|
*
|
||||||
|
* @return array The Visual Console Item data structure stored into the DB.
|
||||||
|
* @throws \Exception When the data cannot be retrieved from the DB.
|
||||||
|
*
|
||||||
|
* @override Model::fetchDataFromDB.
|
||||||
|
*/
|
||||||
|
protected static function fetchDataFromDB(array $filter): array
|
||||||
|
{
|
||||||
|
// Due to this DB call, this function cannot be unit tested without
|
||||||
|
// a proper mock.
|
||||||
|
$row = \db_get_row_filter('tlayout_data', $filter);
|
||||||
|
|
||||||
|
if ($row === false) {
|
||||||
|
throw new \Exception('error fetching the data from the DB');
|
||||||
|
}
|
||||||
|
|
||||||
|
return $row;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Obtain a vc item instance from the database using an identifier.
|
||||||
|
*
|
||||||
|
* @param integer $id Identifier of the Visual Console Item.
|
||||||
|
*
|
||||||
|
* @return array The Visual Console Item data structure stored into the DB.
|
||||||
|
* @throws \Exception When the data cannot be retrieved from the DB.
|
||||||
|
*/
|
||||||
|
protected static function fromDBWithId(int $id): array
|
||||||
|
{
|
||||||
|
return static::fromDB(['id' => $id]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
use PHPUnit\Framework\TestCase;
|
use PHPUnit\Framework\TestCase;
|
||||||
use Models\VisualConsole\items\Box as Vox;
|
use Models\VisualConsole\items\Box;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test class
|
* Test class
|
||||||
|
@ -15,8 +15,8 @@ class BoxTest extends TestCase
|
||||||
public function testCanBeCreatedFromValidUserStructure(): void
|
public function testCanBeCreatedFromValidUserStructure(): void
|
||||||
{
|
{
|
||||||
$this->assertInstanceOf(
|
$this->assertInstanceOf(
|
||||||
Vox::class,
|
Box::class,
|
||||||
new Vox(
|
Box::fromArray(
|
||||||
[
|
[
|
||||||
'id' => 69,
|
'id' => 69,
|
||||||
'type' => 12,
|
'type' => 12,
|
||||||
|
@ -33,18 +33,18 @@ class BoxTest extends TestCase
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
// $this->assertInstanceOf(
|
$this->assertInstanceOf(
|
||||||
// Vox::class,
|
Box::class,
|
||||||
// Vox::fromArray(
|
Box::fromArray(
|
||||||
// [
|
[
|
||||||
// 'id' => 1000,
|
'id' => 1000,
|
||||||
// 'type' => 8,
|
'type' => 8,
|
||||||
// 'name' => 'test',
|
'name' => 'test',
|
||||||
// 'width' => 100,
|
'width' => 100,
|
||||||
// 'height' => 900,
|
'height' => 900,
|
||||||
// ]
|
]
|
||||||
// )
|
)
|
||||||
// );
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -52,7 +52,7 @@ class BoxTest extends TestCase
|
||||||
{
|
{
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
'{"id":7,"type":12,"label":null,"labelPosition":"up","isLinkEnabled":true,"isOnTop":false,"parentId":null,"aclGroupId":null,"width":0,"height":0,"x":-666,"y":76,"borderWidth":0,"borderColor":null,"fillColor":null}',
|
'{"id":7,"type":12,"label":null,"labelPosition":"up","isLinkEnabled":true,"isOnTop":false,"parentId":null,"aclGroupId":null,"width":0,"height":0,"x":-666,"y":76,"borderWidth":0,"borderColor":null,"fillColor":null}',
|
||||||
new Vox(
|
Box::fromArray(
|
||||||
[
|
[
|
||||||
'id' => 7,
|
'id' => 7,
|
||||||
'type' => 10,
|
'type' => 10,
|
||||||
|
|
Loading…
Reference in New Issue