Skip to content

Commit c404fc1

Browse files
author
Artem Shteltser
committed
✨ Added Query Class to build query for request
1 parent 10aab51 commit c404fc1

File tree

6 files changed

+299
-68
lines changed

6 files changed

+299
-68
lines changed

src/PowerLink.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,12 +127,13 @@ private function request(string $method, string $path, array $params)
127127

128128
/**
129129
* Query request
130-
* @param array $params
130+
* @param Query $query_object
131131
*
132132
* @return object
133133
*/
134-
public function query(array $params)
134+
public function query(Query $query_object)
135135
{
136+
$params = $query_object->getParams();
136137
return $this->request("POST", "query", $params);
137138
}
138139

src/Query.php

Lines changed: 107 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,21 @@
22

33
namespace PowerLink;
44

5+
use PowerLink\QuerySyntax\OrderBy;
6+
use PowerLink\QuerySyntax\Where;
7+
58
/**
69
* Class defining a query request in PowerLink with methods to set
710
* query settings
811
*/
912
class Query
1013
{
14+
/**
15+
* SQL query for selecting ites
16+
* @var string
17+
*/
18+
protected $query = '';
19+
1120
/**
1221
* Object Type
1322
* @var string
@@ -16,37 +25,120 @@ class Query
1625

1726
/**
1827
* Number of items returned per page
19-
* @var string
28+
* @var int
2029
*/
21-
protected $page_size;
30+
protected $page_size = 50;
2231

2332
/**
2433
* Number of requested page
25-
* @var string
34+
* @var int
2635
*/
27-
protected $page_number;
36+
protected $page_number = 1;
2837

2938
/**
3039
* Array of requested fields
31-
* @var array
40+
* @var array|null
3241
*/
33-
protected $fields;
42+
protected $fields = null;
3443

3544
/**
36-
* SQL query for selecting ites
37-
* @var string
45+
* Order By object
46+
* @var OrderBy
3847
*/
39-
protected $query;
48+
protected $order_by;
4049

4150
/**
42-
* Name of field to sort by
43-
* @var string
51+
* Set object type
52+
* @param int $object_type Object Type
4453
*/
45-
protected $sort_by;
54+
public function setObjectType(int $object_type)
55+
{
56+
$this->object_type = $object_type;
57+
}
4658

4759
/**
48-
* Name of field to sort by
49-
* @var ASC|DESC
60+
* Set object type
61+
* @param string $field Field name
62+
* @param OrderBy::ASC|OrderBy::DESC|string $sort_by Field name
5063
*/
51-
protected $sort_type;
64+
public function setOrderBy(string $field, string $sort_by)
65+
{
66+
$this->order_by = new OrderBy($field, $sort_by);
67+
}
68+
69+
/**
70+
* Set fields to request
71+
* @param array|string $field Field name
72+
* @throws \InvalidArgumentException Exception if you specified fields in wrong format
73+
*/
74+
public function setFields($fields)
75+
{
76+
if (is_array($fields)) {
77+
if (empty($fields)) {
78+
throw new \InvalidArgumentException('You cannot specify empty field names');
79+
}
80+
$this->fields = $fields;
81+
} elseif (is_string($fields) && $fields === '*') {
82+
$this->fields = null;
83+
} else {
84+
throw new \InvalidArgumentException('You can specify fields by passing an array of field names');
85+
}
86+
}
87+
88+
/**
89+
* Set page size
90+
* @param int $page_size Page size
91+
*/
92+
public function setPageSize(int $page_size)
93+
{
94+
if (is_int($page_size)) {
95+
throw new \InvalidArgumentException('Page number should be integer');
96+
}
97+
98+
$this->page_size = $page_size;
99+
}
100+
101+
/**
102+
* Set page number
103+
* @param int $page_number Page number
104+
*/
105+
public function setPageOffset(int $page_number)
106+
{
107+
if (is_int($page_number)) {
108+
throw new \InvalidArgumentException('Page number should be integer');
109+
}
110+
111+
$this->page_number = $page_number;
112+
}
113+
114+
/**
115+
* Set query
116+
* @param int $query Query
117+
*/
118+
public function setQuery(array $query)
119+
{
120+
$queryBuilder = new Where($query);
121+
$this->query = $queryBuilder->getQuery();
122+
}
123+
124+
public function getParams()
125+
{
126+
$params = array(
127+
'objecttype' => $this->object_type,
128+
'fields' => is_array($this->fields) ? implode(',', $this->fields) : '*',
129+
'page_number' => $this->page_number,
130+
'page_size' => $this->page_size,
131+
);
132+
133+
if ($this->order_by instanceof OrderBy) {
134+
$params['sort_by'] = $this->order_by->getField();
135+
$params['sort_type'] = $this->order_by->getDirection();
136+
}
137+
138+
if (!empty($this->query)) {
139+
$params['query'] = $this->query;
140+
}
141+
142+
return $params;
143+
}
52144
}

src/Query/Builder.php

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

src/Query/Where.php

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

src/Query/OrderBy.php renamed to src/QuerySyntax/OrderBy.php

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
namespace PowerLink\Query;
3+
namespace PowerLink\QuerySyntax;
44

55
/**
66
* Class OrderBy.
@@ -11,23 +11,25 @@ class OrderBy
1111
const DESC = 'desc';
1212

1313
/**
14+
* Name of field to sort by
1415
* @var string
1516
*/
16-
protected $field;
17+
protected $sort_by;
1718

1819
/**
19-
* @var string
20+
* Name of field to sort by
21+
* @var ASC|DESC
2022
*/
21-
protected $direction;
23+
protected $sort_type;
2224

2325
/**
2426
* @param string $field
25-
* @param ASC|DESC|string $direction
27+
* @param string $direction
2628
*/
27-
public function __construct(string $field, $direction)
29+
public function __construct(string $sort_by, $sort_type = self::ASC)
2830
{
29-
$this->setField($field);
30-
$this->setDirection($direction);
31+
$this->setField($sort_by);
32+
$this->setDirection($sort_type);
3133
}
3234

3335
/**

0 commit comments

Comments
 (0)