Merge pull request #79 from ahmedash95/users-pagination

Add simple pagination to users page
This commit is contained in:
Marcel Pociot
2020-07-01 18:10:58 +02:00
committed by GitHub
5 changed files with 74 additions and 7 deletions

View File

@@ -10,6 +10,8 @@ interface UserRepository
public function getUserById($id): PromiseInterface;
public function paginateUsers(int $perPage, int $currentPage): PromiseInterface;
public function getUserByToken(string $authToken): PromiseInterface;
public function storeUser(array $data): PromiseInterface;

View File

@@ -21,10 +21,10 @@ class GetUsersController extends AdminController
public function handle(Request $request, ConnectionInterface $httpConnection)
{
$this->userRepository
->getUsers()
->then(function ($users) use ($httpConnection) {
->paginateUsers(20, (int) $request->get('page', 1))
->then(function ($paginated) use ($httpConnection) {
$httpConnection->send(
respond_json(['users' => $users])
respond_json(['paginated' => $paginated])
);
$httpConnection->close();

View File

@@ -21,10 +21,10 @@ class ListUsersController extends AdminController
public function handle(Request $request, ConnectionInterface $httpConnection)
{
$this->userRepository
->getUsers()
->then(function ($users) use ($httpConnection) {
->paginateUsers(20, (int) $request->get('page', 1))
->then(function ($paginated) use ($httpConnection) {
$httpConnection->send(
respond_html($this->getView($httpConnection, 'server.users.index', ['users' => $users]))
respond_html($this->getView($httpConnection, 'server.users.index', ['paginated' => $paginated]))
);
$httpConnection->close();

View File

@@ -31,6 +31,35 @@ class DatabaseUserRepository implements UserRepository
return $deferred->promise();
}
public function paginateUsers(int $perPage, int $currentPage): PromiseInterface
{
$deferred = new Deferred();
$this->database
->query('SELECT * FROM users ORDER by created_at DESC LIMIT :limit OFFSET :offset', [
'limit' => $perPage + 1,
'offset' => $currentPage < 2 ? 0 : ($currentPage - 1) * $perPage,
])
->then(function (Result $result) use ($deferred, $perPage, $currentPage) {
if(count($result->rows) == $perPage + 1) {
array_pop($result->rows);
$nextPage = $currentPage + 1;
}
$paginated = [
'users' => $result->rows,
'current_page' => $currentPage,
'per_page' => $perPage,
'next_page' => $nextPage ?? null,
'previous_page' => $currentPage > 1 ? $currentPage - 1 : null,
];
$deferred->resolve($paginated);
});
return $deferred->promise();
}
public function getUserById($id): PromiseInterface
{
$deferred = new Deferred();