From 8087897879ec305fec74fae5e1757df96e318c4d Mon Sep 17 00:00:00 2001
From: Fawwaz Anugrah Wiradhika Dharmasatya <13520086.std.stei.itb.ac.id>
Date: Thu, 1 Dec 2022 07:03:49 +0700
Subject: [PATCH] feat:menambahkan endpoint buat requewst sub sambil nyabun

---
 .env.example                       |  2 +-
 Controller/SubsciberController.php | 19 ++++++++++++++++---
 Router/PremiumRouter.php           |  1 +
 Service/Soap/SubscribeSoap.php     | 24 +++++++++++++++++++++---
 View/Pages/PremiumSinger.php       |  3 ++-
 static/js/premium-singer.js        | 11 +++++++++--
 6 files changed, 50 insertions(+), 10 deletions(-)

diff --git a/.env.example b/.env.example
index e8b2272..0628e8d 100644
--- a/.env.example
+++ b/.env.example
@@ -9,4 +9,4 @@ POSTGRES_PASSWORD=root
 API_KEY=secret
 SOAP_HOST=http://webtune-soap:8080/webtune-soap
 REST_HOST=http://webtune-rest:8888
-REST_KEY=apahayo
\ No newline at end of file
+REST_KEY=secret_turu
\ No newline at end of file
diff --git a/Controller/SubsciberController.php b/Controller/SubsciberController.php
index 7bda460..9336f6d 100644
--- a/Controller/SubsciberController.php
+++ b/Controller/SubsciberController.php
@@ -8,6 +8,7 @@ use Lib\Interfaces\Routing\IRequest;
 use Lib\Interfaces\Routing\IResponse;
 use Model\Relations\Subscription;
 use Lib\Service\Api\FetchAPI;
+use Service\Soap\SubscribeSoap;
 
 class SubsciberController
 {
@@ -155,15 +156,13 @@ class SubsciberController
     ];
     $rest_key = getenv("REST_KEY");
     $headers = [
-      "X-API-KEY" => $rest_key
+      "X-API-KEY: $rest_key", //NOTE: buat header, harus array of lines
     ];
     $output  = $fetcher->get("/singers", $param, $headers);
-
     if (!$output) {
       return false;
     }
     $data = json_decode($output, true)["data"];
-
     //tambahin status berlangganan
     $subscriber = new Subscription($db);
     $transaction = $subscriber->transaction();
@@ -248,4 +247,18 @@ class SubsciberController
     //   "data"=>$data
     // ]);
   }
+
+  static function subscribeSinger(IRequest $req, IResponse $res){
+    $request_data = $req->formData();
+    $singer_id = $request_data["singer-id"];
+    $user_id = $request_data["user-id"];
+
+    $nyabun_client = new SubscribeSoap();
+    $nyabun_client->requestSubscription($singer_id,$user_id);
+
+    return $res->json([
+      "status"=>"success",
+      "message"=>"subscription request sent to the server successfully!",
+    ]);
+  }
 };
\ No newline at end of file
diff --git a/Router/PremiumRouter.php b/Router/PremiumRouter.php
index 192e495..0e1ae49 100644
--- a/Router/PremiumRouter.php
+++ b/Router/PremiumRouter.php
@@ -11,6 +11,7 @@ class PremiumRouter{
         $route = new (Dependency::get_dependency(IRoute::class));
         //dapetin list penyanyi permium
         $route->route(HttpMethod::Get,"/premium",[SubsciberController::class,"getPremiumSinger"]);
+        $route->route(HttpMethod::Post,"/premium/subscribe",[SubsciberController::class,"subscribeSinger"]);
 
         return $route;
     }
diff --git a/Service/Soap/SubscribeSoap.php b/Service/Soap/SubscribeSoap.php
index 81b88b4..7db84a1 100644
--- a/Service/Soap/SubscribeSoap.php
+++ b/Service/Soap/SubscribeSoap.php
@@ -2,11 +2,13 @@
 
 namespace Service\Soap;
 
-class SubscribeSoap {
+class SubscribeSoap
+{
   private SoapClientFactory $factory;
 
-  public function __construct() {
-    $wsdl = getenv("SOAP_API"). "/services/subscription?wsdl";
+  public function __construct()
+  {
+    $wsdl = getenv("SOAP_API") . "/services/subscription?wsdl";
     $this->factory = new SoapClientFactory($wsdl);
   }
 
@@ -25,4 +27,20 @@ class SubscribeSoap {
       ]
     );
   }
+
+  public function requestSubscription(
+    string $singer_id,
+    string $user_id,
+    ?string $last_token = null
+  ) {
+    $soap = $this->factory->generate_client($last_token);
+
+    return $soap->__soapCall(
+      "requestSubscription",
+      [
+        "creator-id" => $singer_id,
+        "subscriber-id" => $user_id,
+      ]
+    );
+  }
 }
diff --git a/View/Pages/PremiumSinger.php b/View/Pages/PremiumSinger.php
index 77bc4b2..382b30a 100644
--- a/View/Pages/PremiumSinger.php
+++ b/View/Pages/PremiumSinger.php
@@ -10,7 +10,8 @@
       "/static/css/form.css"
     ],
     "scripts"=>[
-      "/static/js/premium-singer.js"
+      "/static/js/premium-singer.js",
+      "/static/js/http.js"
     ],
   ]);
 ?>
diff --git a/static/js/premium-singer.js b/static/js/premium-singer.js
index 50e363a..55f14cd 100644
--- a/static/js/premium-singer.js
+++ b/static/js/premium-singer.js
@@ -1,4 +1,11 @@
-function subscribe(singer_id, user_id){
+async function subscribe(singer_id, user_id){
     let formData = new FormData()
-    //nembak ke soap
+    //nembak ke php dulu baru nyabun
+    formData.append("singer-id",singer_id)
+    formData.append("user-id",user_id)
+
+    const { data:status} = await http.post("/premium/subscribe",formData,{
+        json:false,
+    })
+    console.log(status)
 }
\ No newline at end of file
-- 
GitLab