From d34cf7e77cccc31eb313f3140b999dccb17fc557 Mon Sep 17 00:00:00 2001
From: Rava Maulana <ravamaulana14@gmail.com>
Date: Mon, 30 Oct 2023 20:18:53 +0700
Subject: [PATCH] feat: added episode to session on play

---
 docker-compose.yaml                           |  2 ++
 .../controllers/episode/post_play_episode.php | 31 +++++++++++++++++++
 src/app/core/app.php                          |  1 +
 src/app/init.php                              |  1 +
 src/public/javascript/podcast/script.js       | 19 +++++++++---
 5 files changed, 50 insertions(+), 4 deletions(-)
 create mode 100644 src/app/controllers/episode/post_play_episode.php

diff --git a/docker-compose.yaml b/docker-compose.yaml
index 1e35da2..629c548 100644
--- a/docker-compose.yaml
+++ b/docker-compose.yaml
@@ -15,6 +15,8 @@ services:
     restart: always
     ports: 
       - 3308:3307
+    expose:
+      - 3307
     hostname: tubes-php-db
     env_file: .env
     volumes:
diff --git a/src/app/controllers/episode/post_play_episode.php b/src/app/controllers/episode/post_play_episode.php
new file mode 100644
index 0000000..f21f6d8
--- /dev/null
+++ b/src/app/controllers/episode/post_play_episode.php
@@ -0,0 +1,31 @@
+<?php
+
+class PostPlayEpisodeController
+{
+  public function call()
+  {
+    session_start();
+    if (!isset($_SESSION["user_id"])) {
+      http_response_code(403);
+      header("Content-Type: application/json");
+      echo json_encode(["message" => "unauthorized"]);
+
+      return;
+    }
+
+    // Check for podcast id
+    if (!isset($_POST["idEpisode"])) {
+      http_response_code(400);
+      header("Content-Type: application/json");
+      echo json_encode(["message" => "missing episode id"]);
+
+      return;
+    }
+
+    $_SESSION["eps_id"] = $_POST["idEpisode"];
+
+    http_response_code(200);
+    header("Content-Type: application/json");
+    echo json_encode(["message" => "success"]);
+  }
+}
diff --git a/src/app/core/app.php b/src/app/core/app.php
index 8432475..af5ac7b 100644
--- a/src/app/core/app.php
+++ b/src/app/core/app.php
@@ -28,6 +28,7 @@ class App
     $router->delete("public/dashboard/podcast", new DeletePodcastController());
 
     $router->get("public/podcast", new GetPodcastPageController());
+    $router->post("public/episode/play", new PostPlayEpisodeController());
 
     $router->post("public/logout", new LogoutController());
 
diff --git a/src/app/init.php b/src/app/init.php
index a984ef3..3ad6489 100644
--- a/src/app/init.php
+++ b/src/app/init.php
@@ -22,6 +22,7 @@ require_once __DIR__ . "/controllers/dashboard/post_edit_podcast.php";
 require_once __DIR__ . "/controllers/dashboard/delete_podcast.php";
 
 require_once __DIR__ . "/controllers/podcast/get_page.php";
+require_once __DIR__ . "/controllers/episode/post_play_episode.php";
 
 require_once __DIR__ . "/controllers/logout/logout.php";
 
diff --git a/src/public/javascript/podcast/script.js b/src/public/javascript/podcast/script.js
index b1dd6de..ba22950 100644
--- a/src/public/javascript/podcast/script.js
+++ b/src/public/javascript/podcast/script.js
@@ -2,16 +2,27 @@
 
 // Get DOM elements
 const playButtonsEl = document.querySelectorAll(".play-button");
-const addLibraryButtonEl = document.getElementById("add-library-btn")
-const libraryChoicesEl = document.getElementById("library-choices")
-const overlayEl = document.getElementById("overlay-library")
+const addLibraryButtonEl = document.getElementById("add-library-btn");
+const libraryChoicesEl = document.getElementById("library-choices");
+const overlayEl = document.getElementById("overlay-library");
 
 // Handle play episode
 Array.from(playButtonsEl).forEach((el) => {
   el.addEventListener("click", (e) => {
     e.preventDefault();
 
-    console.log(`play episode id: ${el.dataset.id}`);
+    const formData = new FormData();
+    formData.append("idEpisode", el.dataset.id);
+
+    const xhr = new XMLHttpRequest();
+    xhr.open("POST", "/public/episode/play");
+
+    xhr.onreadystatechange = () => {
+      if (xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
+      }
+    };
+
+    xhr.send(formData);
   });
 });
 
-- 
GitLab