From a7562d26819d544938ec52f92d027065b6b5540b Mon Sep 17 00:00:00 2001
From: Muhammad Rifko Favian <13521075@std.stei.itb.ac.id>
Date: Mon, 13 Nov 2023 04:45:00 +0700
Subject: [PATCH] feat: subscription model

---
 app/Controllers/SubscriptionController.php | 25 +++++++++++++++++
 app/Models/Subscription.php                | 32 ++++++++++++++++++++++
 db/init.sql                                |  9 ++++++
 3 files changed, 66 insertions(+)
 create mode 100644 app/Controllers/SubscriptionController.php
 create mode 100644 app/Models/Subscription.php

diff --git a/app/Controllers/SubscriptionController.php b/app/Controllers/SubscriptionController.php
new file mode 100644
index 0000000..b42c39a
--- /dev/null
+++ b/app/Controllers/SubscriptionController.php
@@ -0,0 +1,25 @@
+<?php
+ob_start();
+require_once(__DIR__ . '/../Models/Subscription.php');
+
+
+class SubscriptionController {
+    private $subscriptionModel;
+
+    public function __construct() {
+        $this->subscriptionModel = new SubscriptionModel();
+    }
+
+    public function createSubscription($creator_id, $subscriber_id, $creator_name) {
+        return $this->subscriptionModel->createSubscription($creator_id, $subscriber_id, $creator_name);
+    }
+
+    public function getSubscription($subscriber_id) {
+        return $this->subscriptionModel->getSubscription($subscriber_id);
+    }
+
+    public function updateSubscription($creator_id, $subscriber_id, $status) {
+        return $this->subscriptionModel->updateSubscription($creator_id, $subscriber_id, $status);
+    }
+}
+?>
\ No newline at end of file
diff --git a/app/Models/Subscription.php b/app/Models/Subscription.php
new file mode 100644
index 0000000..46dcabc
--- /dev/null
+++ b/app/Models/Subscription.php
@@ -0,0 +1,32 @@
+<?php
+    require_once(__DIR__ . '/../../db/connect.php');
+    
+    class SubscriptionModel {
+        public function createSubscription($creator_id, $subscriber_id, $creator_name) {
+            global $db;
+    
+            $stmt = $db->prepare("INSERT INTO subscription (creator_id, subscriber_id, creator_name) VALUES (?, ?, ?)");
+            if ($stmt->execute([$creator_id, $subscriber_id, $creator_name])) {
+                return "Subscription created successfully";
+            }
+        }
+
+        public function getSubscription($subscriber_id) {
+            global $db;
+    
+            $stmt = $db->prepare("SELECT * FROM subscription WHERE subscriber_id = ?");
+            $stmt->execute([$subscriber_id]);
+    
+            return $stmt->fetchAll(PDO::FETCH_ASSOC);
+        }
+
+        public function updateSubscription($creator_id, $subscriber_id, $status) {
+            global $db;
+    
+            $stmt = $db->prepare("UPDATE subscription SET status = ? WHERE creator_id = ? AND subscriber_id = ?");
+            if ($stmt->execute([$status, $creator_id, $subscriber_id])) {
+                return "Subscription updated successfully";
+            }
+        }
+    }
+?>
\ No newline at end of file
diff --git a/db/init.sql b/db/init.sql
index 2260e60..0beaedf 100644
--- a/db/init.sql
+++ b/db/init.sql
@@ -36,4 +36,13 @@ CREATE TABLE IF NOT EXISTS pembelian (
   pembelian_created_time DATETIME,
   FOREIGN KEY (ticket_id) REFERENCES tickets(ticket_id),
   FOREIGN KEY (user_id) REFERENCES users(user_ID) ON DELETE SET NULL
+);
+
+CREATE TABLE IF NOT EXISTS subscription (
+  creator_id int NOT NULL,
+  subscriber_id int NOT NULL,
+  status enum('PENDING','ACCEPTED','REJECTED') NOT NULL DEFAULT 'PENDING',
+  creator_name char(255) NOT NULL,
+  PRIMARY KEY (creator_id, subscriber_id),
+  FOREIGN KEY (subscriber_id) REFERENCES users(user_ID) ON DELETE CASCADE
 );
\ No newline at end of file
-- 
GitLab