From 633de2dace88ec0418f6c67f3d56a1042eda773a Mon Sep 17 00:00:00 2001
From: Fawwaz Anugrah Wiradhika Dharmasatya <13520086.std.stei.itb.ac.id>
Date: Mon, 28 Nov 2022 14:04:53 +0700
Subject: [PATCH] feat: pagination sudah kelar harusnya

---
 Controller/SubsciberController.php | 31 +++++++++++++++++++++++++-----
 View/Pages/PremiumSinger.php       |  9 ++++++---
 static/js/premium-singer.js        |  0
 3 files changed, 32 insertions(+), 8 deletions(-)
 create mode 100644 static/js/premium-singer.js

diff --git a/Controller/SubsciberController.php b/Controller/SubsciberController.php
index 2b408d8..98abb2a 100644
--- a/Controller/SubsciberController.php
+++ b/Controller/SubsciberController.php
@@ -10,6 +10,8 @@ use Model\Relations\Subscription;
 use Lib\Service\Api\FetchAPI;
 
 class SubsciberController {
+  const DEFAULT_PAGE = 1;
+  const DEFAULT_LIMIT = 10;
   static function setStatus(IRequest $req, IResponse $res) {
     $subscriber = new Subscription($req->db);
     $transaction = $subscriber->transaction();
@@ -140,11 +142,11 @@ class SubsciberController {
     }
   }
 
-  static function fetchSubscriptions(int $user_id,$db){
+  static function fetchSubscriptions(int $page,int $limit, int $user_id,$db){
     $fetcher = new FetchAPI(getenv("REST_HOST"));
     $param = [
-      "page"=>1,
-      "limit"=>10
+      "page"=>$page,
+      "limit"=>$limit,
     ];
     $rest_key = getenv("REST_KEY");
     $headers = [
@@ -196,7 +198,13 @@ class SubsciberController {
   static function getPremiumSinger(IRequest $req, IResponse $res){
     //data ada
     $user_id = $req->auth?$req->auth->user_id:-1;
-    $data = SubsciberController::fetchSubscriptions($user_id,$req->db);
+    $page = $req->getQuery("page") ? 
+      ($req->getQuery("page")>0 ? $req->getQuery("page") : SubsciberController::DEFAULT_PAGE)
+      : SubsciberController::DEFAULT_PAGE;
+    $limit = $req->getQuery("limit") ? 
+      ($req->getQuery("limit")>0?$req->getQuery("limit"):SubsciberController::DEFAULT_LIMIT)
+      :SubsciberController::DEFAULT_LIMIT;
+    $data = SubsciberController::fetchSubscriptions($page,$limit,$user_id,$req->db);
     if(!$data){
       // return $res->json([
       //   "status"=>"failed",
@@ -208,11 +216,24 @@ class SubsciberController {
     }
 
  //   $data = json_decode($output,true)["data"];
-    $page = 1;
+    //fetch max page
+    $fetcher = new FetchAPI(getenv("REST_HOST"));
+    $param = [
+      "page-size"=>$limit,
+    ];
+    $rest_key = getenv("REST_KEY");
+    $headers = [
+      "X-API-KEY"=> $rest_key
+    ];
+    $output  = $fetcher->get("/singers/max-page",$param,$headers);
     $total_page = 1;
+    if($output){
+      $total_page = json_decode($output,true)["data"];
+    }
     return $res->view("Pages/PremiumSinger", [
       "singers" => $data,
       "page" => $page,
+      "limit"=>$limit,
       "next_page" => $page < $total_page ? $page + 1 : null,
       "prev_page" => $page > 1 ? $page - 1 : null,
       "auth" => $req->auth,
diff --git a/View/Pages/PremiumSinger.php b/View/Pages/PremiumSinger.php
index 90eefeb..590b064 100644
--- a/View/Pages/PremiumSinger.php
+++ b/View/Pages/PremiumSinger.php
@@ -9,6 +9,9 @@
       "/static/css/premium-singer.css",
       "/static/css/form.css"
     ],
+    "scripts"=>[
+      "/static/js/premium-singer.js"
+    ],
   ]);
 ?>
 
@@ -29,7 +32,7 @@
       foreach($singers as $number=>$singer) {
     ?> 
         <tr>
-          <td><?= $number+1 ?></td>
+          <td><?= (10*($page-1))+($number+1) ?></td>
           <td><?= $singer["name"] ?></td>
           <?php if(isset($auth)){ ?>
             <td>
@@ -58,7 +61,7 @@
 <?php
   $this->component("Component/Pagination", [
     "page_number" => $page,
-    "next_page" => isset($next_page) && !is_null($next_page) ? "/admin/users/?page=$next_page": null,
-    "prev_page" => isset($prev_page) && !is_null($prev_page) ? "/admin/users/?page=$prev_page": null,
+    "next_page" => isset($next_page) && !is_null($next_page) ? "/premium?page=$next_page&limit=$limit": null,
+    "prev_page" => isset($prev_page) && !is_null($prev_page) ? "/premium?page=$prev_page&limit=$limit": null,
   ])
 ?>
\ No newline at end of file
diff --git a/static/js/premium-singer.js b/static/js/premium-singer.js
new file mode 100644
index 0000000..e69de29
-- 
GitLab