From b4e6fe7135b488a3e530e707855eb51bcdee5cce Mon Sep 17 00:00:00 2001
From: Alejandro Celaya <alejandro@alejandrocelaya.com>
Date: Mon, 4 Jul 2016 12:50:06 +0200
Subject: [PATCH] Created trait to serialize paginators

---
 .../Rest/ListShortcodesMiddleware.php         | 17 ++++++-----------
 .../Util/PaginatorSerializerTrait.php         | 19 +++++++++++++++++++
 2 files changed, 25 insertions(+), 11 deletions(-)
 create mode 100644 src/Paginator/Util/PaginatorSerializerTrait.php

diff --git a/src/Middleware/Rest/ListShortcodesMiddleware.php b/src/Middleware/Rest/ListShortcodesMiddleware.php
index 5f3b92a0..6a4a627f 100644
--- a/src/Middleware/Rest/ListShortcodesMiddleware.php
+++ b/src/Middleware/Rest/ListShortcodesMiddleware.php
@@ -1,6 +1,7 @@
 <?php
 namespace Acelaya\UrlShortener\Middleware\Rest;
 
+use Acelaya\UrlShortener\Paginator\Util\PaginatorSerializerTrait;
 use Acelaya\UrlShortener\Service\ShortUrlService;
 use Acelaya\UrlShortener\Service\ShortUrlServiceInterface;
 use Acelaya\UrlShortener\Util\RestUtils;
@@ -13,6 +14,8 @@ use Zend\Stratigility\MiddlewareInterface;
 
 class ListShortcodesMiddleware implements MiddlewareInterface
 {
+    use PaginatorSerializerTrait;
+
     /**
      * @var ShortUrlServiceInterface
      */
@@ -57,17 +60,9 @@ class ListShortcodesMiddleware implements MiddlewareInterface
     public function __invoke(Request $request, Response $response, callable $out = null)
     {
         try {
-            $shortUrls = $this->shortUrlService->listShortUrls();
-
-            return new JsonResponse([
-                'shortUrls' => [
-                    'data' => ArrayUtils::iteratorToArray($shortUrls->getCurrentItems()),
-                    'pagination' => [
-                        'currentPage' => $shortUrls->getCurrentPageNumber(),
-                        'pagesCount' => $shortUrls->count(),
-                    ],
-                ]
-            ]);
+            $query = $request->getQueryParams();
+            $shortUrls = $this->shortUrlService->listShortUrls(isset($query['page']) ? $query['page'] : 1);
+            return new JsonResponse(['shortUrls' => $this->serializePaginator($shortUrls)]);
         } catch (\Exception $e) {
             return new JsonResponse([
                 'error' => RestUtils::UNKNOWN_ERROR,
diff --git a/src/Paginator/Util/PaginatorSerializerTrait.php b/src/Paginator/Util/PaginatorSerializerTrait.php
new file mode 100644
index 00000000..573832ca
--- /dev/null
+++ b/src/Paginator/Util/PaginatorSerializerTrait.php
@@ -0,0 +1,19 @@
+<?php
+namespace Acelaya\UrlShortener\Paginator\Util;
+
+use Zend\Paginator\Paginator;
+use Zend\Stdlib\ArrayUtils;
+
+trait PaginatorSerializerTrait
+{
+    protected function serializePaginator(Paginator $paginator)
+    {
+        return [
+            'data' => ArrayUtils::iteratorToArray($paginator->getCurrentItems()),
+            'pagination' => [
+                'currentPage' => $paginator->getCurrentPageNumber(),
+                'pagesCount' => $paginator->count(),
+            ],
+        ];
+    }
+}