Skip to content

Commit 3d2faef

Browse files
chore: filter, pagination and limit in filter function
1 parent 5332aed commit 3d2faef

File tree

5 files changed

+69
-15
lines changed

5 files changed

+69
-15
lines changed

composer.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@
2020
"license": "MIT",
2121
"autoload": {
2222
"files": [
23-
"src/function.php"
23+
"src/function.php",
24+
"src/filter.php"
2425
],
2526
"psr-4": {
2627
"RestJS\\": "src/"

src/Controller/AbstractController.php

+15-9
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
namespace RestJS\Controller;
44

55
use RestJS\Message\Response;
6-
use function RestJS\response;
6+
use function RestJS\response, RestJS\filter;
77
use Slim\Exception\HttpBadRequestException;
88

99
/** Abstract Controller Functions */
@@ -18,20 +18,26 @@ public function __construct($model) {
1818

1919
/** Find All Data */
2020
public function findAll($req, $res) {
21-
return response($req, $res, new Response(data: $this->_model->findAll()));
21+
$data = filter($this->_model->findAll(), $req);
22+
return response($req, $res, new Response(data: $data));
2223
}
2324

24-
/** Find Data by Column */
25+
/** Find Data by Conditional */
2526
public function findByColumn($req, $res, $args) {
26-
$data = $this->_model->findBy($args);
27-
return response($req, $res, args: new Response(data: [...$data]));
27+
$data = filter($this->_model->findBy($args), $req);
28+
return response($req, $res, args: new Response(data: $data));
29+
}
30+
31+
/** Filter Data by Conditional */
32+
public function filter($req, $res, $args) {
33+
return response($req, $res, args: new Response(data: $this->_model->filter($args)));
2834
}
2935

3036
/** Delete Data by Id */
3137
public function delete($req, $res, $args) {
3238
$data = $this->_model->delete($args);
3339

34-
// Check data is deleted
40+
// Check Data is Deleted
3541
if (!$data)
3642
throw new HttpBadRequestException($req, "Something went wrong...");
3743

@@ -41,7 +47,7 @@ public function delete($req, $res, $args) {
4147
/** Insert Data */
4248
public function insert($req, $res, $args) {
4349

44-
// Check user input valid form data
50+
// Check User Input Valid Form Data
4551
if(!$req->getParsedBody())
4652
throw new HttpBadRequestException($req, "Please enter valid form data.");
4753

@@ -52,13 +58,13 @@ public function insert($req, $res, $args) {
5258
/** Update by Id */
5359
public function update($req, $res, $args) {
5460

55-
// check user input valid form data
61+
// Check User Input Valid Form Data
5662
if (!$req->getParsedBody())
5763
throw new HttpBadRequestException($req, "Please enter valid form data.");
5864

5965
$data = $this->_model->update($req->getParsedBody(), $args);
6066

61-
// Check data is updated
67+
// Check Data is Updated
6268
if (!$data)
6369
throw new HttpBadRequestException($req, "Something went wrong...");
6470

src/api/category/router.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
class Router {
99
public function __invoke(RouteCollectorProxy $router) {
1010
$router->get('/', [Controller::class, "findAll"]);
11-
$router->get('/{id:[0-9]+}/', [Controller::class, "findByColumn"]);
12-
$router->get('/{slug:[a-z0-9-]+}/', [Controller::class, "findByColumn"]);
11+
$router->get('/{id:[0-9]+}/', [Controller::class, "filter"]);
12+
$router->get('/{slug:[a-z0-9-]+}/', [Controller::class, "filter"]);
1313
}
1414
}

src/api/user/router.php

+3-3
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@
99
class Router {
1010
public function __invoke(RouteCollectorProxy $router) {
1111
$router->get('/', [Controller::class, "findAll"]);
12-
$router->get('/{id:[0-9]+}/', [Controller::class, "findByColumn"]);
13-
$router->get('/{username:[a-z0-9-]+}/', [Controller::class, "findByColumn"]);
12+
$router->get('/{id:[0-9]+}/', [Controller::class, "filter"]);
13+
$router->get('/{username:[a-z0-9-]+}/', [Controller::class, "filter"]);
1414

1515
// Category Route
1616
$router->get('/{userId:[0-9]+}/categories/', [CategoryController::class, "findByColumn"]);
17-
$router->get('/{userId:[0-9]+}/categories/{id:[0-9]+}/', [CategoryController::class, "findByColumn"]);
17+
$router->get('/{userId:[0-9]+}/categories/{id:[0-9]+}/', [CategoryController::class, "filter"]);
1818
$router->post('/{userId:[0-9]+}/categories/', [CategoryController::class, "insert"]);
1919
$router->put('/{userId:[0-9]+}/categories/{id:[0-9]+}/', [CategoryController::class, "update"]);
2020
$router->delete('/{userId:[0-9]+}/categories/{id:[0-9]+}/', [CategoryController::class, "delete"]);

src/filter.php

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
<?php
2+
declare(strict_types=1);
3+
namespace RestJS;
4+
5+
use Psr\Http\Message\ServerRequestInterface as Request;
6+
7+
/** Filter Function for Response Data Manipulation */
8+
function filter($data, Request $req): array {
9+
10+
// Get Query Params Values
11+
extract($req->getQueryParams() ?? []);
12+
13+
/** After Filter Data */
14+
$filterData = [];
15+
16+
/** Filter Column Query Params */
17+
$filter ??= null;
18+
19+
/** Pagination Page Number Query Params */
20+
$page ??= 1;
21+
22+
/** Per Page Limit Query Params */
23+
$limit ??= 10;
24+
25+
// Selected Column Fetch All Data
26+
if ($filter):
27+
$filter = explode(",", $filter);
28+
29+
foreach ($data as $item)
30+
array_push($filterData, array_intersect_key((array) $item, array_flip($filter)));
31+
endif;
32+
33+
// According Pagination Fetch All Data
34+
if ($page):
35+
$filter && $data = $filterData;
36+
$filterData = array_slice($data, $page == 1 ? 0 : $limit * ($page - 1), (int) $limit);
37+
endif;
38+
39+
return [
40+
"page" => $page,
41+
"limit" => $limit,
42+
"totalPages" => ceil(count($data) / $limit),
43+
"totalItems" => count($data),
44+
"currentPageItems" => count($filterData),
45+
'data' => $filterData,
46+
];
47+
}

0 commit comments

Comments
 (0)