Skip to content

Commit ac0afb4

Browse files
T3RAN13T3RAN13
authored andcommitted
CommandQueryData class
1 parent 28f7d13 commit ac0afb4

8 files changed

+200
-218
lines changed

Commands/CommandAbstract.php

Lines changed: 0 additions & 159 deletions
This file was deleted.

Commands/CommandInterface.php

Lines changed: 0 additions & 18 deletions
This file was deleted.

Commands/CommandQueryData.php

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -40,15 +40,14 @@ public function setParamByKey($setKey, $setVal)
4040
}
4141

4242
/**
43-
* @param CommandInterface $command
43+
* @param array $map
4444
* @return array
4545
*/
46-
public function getCommandData(CommandInterface $command)
46+
public function prepareData($map)
4747
{
4848
$queryData = [];
49-
$map = $command->getDataMap();
5049
foreach ($map as $route => $rules) {
51-
$this->setQueryDataForRoute($queryData, $route, $rules);
50+
$this->prepareQueryDataForRoute($queryData, $route, $rules);
5251
}
5352

5453
return $queryData;
@@ -61,11 +60,11 @@ public function getCommandData(CommandInterface $command)
6160
* @param array $rules
6261
* @throws CommandQueryDataException
6362
*/
64-
protected function setQueryDataForRoute(&$data, $route, $rules = [])
63+
protected function prepareQueryDataForRoute(&$data, $route, $rules = [])
6564
{
6665
$errors = [];
6766
$routeParts = explode(':', $route);
68-
$values = self::getParamsListByKey($this->params, $routeParts);
67+
$values = $this->getParamsListByKey($this->params, $routeParts);
6968

7069
foreach ($values as $route => $value) {
7170
foreach ($rules as $rule) {
@@ -84,6 +83,11 @@ protected function setQueryDataForRoute(&$data, $route, $rules = [])
8483
}
8584

8685

86+
/**
87+
* @param mixed $value
88+
* @param string $rule
89+
* @return bool
90+
*/
8791
protected function validate($value, $rule)
8892
{
8993
if ($rule === 'required') {
@@ -104,7 +108,12 @@ protected function validate($value, $rule)
104108
}
105109

106110

107-
protected static function getParamsListByKey($params, $routeParts = [])
111+
/**
112+
* @param array $params
113+
* @param array $routeParts
114+
* @return array
115+
*/
116+
protected function getParamsListByKey($params, $routeParts = [])
108117
{
109118
$values = [];
110119
if (empty($routeParts)) {
@@ -118,12 +127,12 @@ protected static function getParamsListByKey($params, $routeParts = [])
118127
$currentKeyPart = (integer)$currentKeyPart;
119128
}
120129
if (isset($params[$currentKeyPart])) {
121-
foreach (self::getParamsListByKey($params[$currentKeyPart], $routeParts) as $valueKey => $value) {
130+
foreach ($this->getParamsListByKey($params[$currentKeyPart], $routeParts) as $valueKey => $value) {
122131
$values[$currentKeyPart . ':' . $valueKey] = $value;
123132
}
124133
} elseif (is_array($params) && $currentKeyPart === '*') {
125134
foreach ($params as $paramKey => $param) {
126-
foreach (self::getParamsListByKey($param, $routeParts) as $valueKey => $value) {
135+
foreach ($this->getParamsListByKey($param, $routeParts) as $valueKey => $value) {
127136
$values[$paramKey . ':' . $valueKey] = $value;
128137
}
129138
}

Commands/CommandQueryDataInterface.php

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,30 @@
66

77
interface CommandQueryDataInterface
88
{
9-
}
9+
/**
10+
* @return array
11+
*/
12+
public function getParams();
13+
14+
/**
15+
* @param $params
16+
*/
17+
public function setParams($params);
18+
19+
/**
20+
* set value in params by key
21+
*
22+
* $setKey example: 'key:1:one_more_key' => $params['key'][1]['one_more_key']
23+
* $setKey example: 'key:a1' => $params['key']['a1']
24+
*
25+
* @param string $setKey
26+
* @param mixed $setVal
27+
*/
28+
public function setParamByKey($setKey, $setVal);
29+
30+
/**
31+
* @param array $map
32+
* @return array
33+
*/
34+
public function prepareData($map);
35+
}

Commands/DataBase/CommandAbstract.php

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
<?php
2+
3+
4+
namespace GrapheneNodeClient\Commands\DataBase;
5+
6+
7+
use GrapheneNodeClient\Commands\CommandQueryData;
8+
use GrapheneNodeClient\Commands\CommandQueryDataInterface;
9+
use GrapheneNodeClient\Connectors\ConnectorInterface;
10+
11+
abstract class CommandAbstract implements CommandInterface
12+
{
13+
/** @var string */
14+
protected $method = '';
15+
/** @var array */
16+
protected $queryDataMap = [];
17+
/** @var ConnectorInterface */
18+
protected $connector;
19+
20+
public function __construct(ConnectorInterface $connector)
21+
{
22+
$this->connector = $connector;
23+
}
24+
25+
/**
26+
* @param CommandQueryDataInterface $commandQueryData
27+
* @param string $answerFormat
28+
* @param string $getElementWithKey If you want to get only certain element from answer.
29+
* Example: 'key:123:qwe' => $array['key']['123']['qwe'] or $object->key->123->qwe
30+
* @return array|object
31+
*/
32+
public function execute(CommandQueryDataInterface $commandQueryData, $getElementWithKey = null, $answerFormat = ConnectorInterface::ANSWER_FORMAT_ARRAY)
33+
{
34+
/** @var CommandQueryData $commandQueryData */
35+
$params = $commandQueryData->prepareData($this->getQueryDataMap());
36+
37+
$answer = $this->doRequest($params, $answerFormat);
38+
39+
$defaultValue = $answerFormat === ConnectorInterface::ANSWER_FORMAT_ARRAY ? [] : ((object)[]);
40+
41+
return $this->getElementByKey($answer, $getElementWithKey, $defaultValue);
42+
}
43+
44+
45+
/**
46+
* @return array|mixed
47+
*/
48+
public function getQueryDataMap()
49+
{
50+
return isset($this->queryDataMap[$this->connector->getPlatform()])
51+
? $this->queryDataMap[$this->connector->getPlatform()]
52+
: $this->queryDataMap;
53+
}
54+
55+
/**
56+
* @param array $params
57+
* @param string $answerFormat
58+
* @return array|object
59+
*/
60+
protected function doRequest($params, $answerFormat = ConnectorInterface::ANSWER_FORMAT_ARRAY)
61+
{
62+
$data = [
63+
'method' => $this->method,
64+
'params' => $params
65+
];
66+
67+
return $this->connector->doRequest($data, $answerFormat);
68+
}
69+
70+
71+
/**
72+
* get all values or vulue by key
73+
*
74+
* Example: 'key:123:qwe' => $array['key']['123']['qwe'] or $object->key->123->qwe
75+
*
76+
* @param null|string $getKey
77+
* @param null|mixed $default
78+
* @param array|object $array
79+
*
80+
* @return mixed
81+
*/
82+
protected function getElementByKey($array, $getKey = null, $default = null)
83+
{
84+
$data = $array;
85+
if ($getKey) {
86+
$keyParts = explode(':', $getKey);
87+
foreach ($keyParts as $key) {
88+
if (is_array($data) && isset($data[$key])) {
89+
$data = $data[$key];
90+
} elseif (is_object($data) && isset($data->$key)) {
91+
$data = $data->$key;
92+
} else {
93+
$data = null;
94+
break;
95+
}
96+
}
97+
}
98+
99+
if ($data === null) {
100+
$data = $default;
101+
}
102+
103+
return $data;
104+
}
105+
}

0 commit comments

Comments
 (0)