diff --git a/app/Server/Models/Event.php b/app/Server/Models/Event.php
index 94ec0d38200f8e5d4b30acc731426dd08ce58f3c..a9c3285e659d0735b7aafcf35d06c8893318edd4 100644
--- a/app/Server/Models/Event.php
+++ b/app/Server/Models/Event.php
@@ -1,18 +1,17 @@
 <?php
 
-require_once(__DIR__ . '/../../db/connect.php');
-require_once(__DIR__ . '/../util.php');
+namespace Server\Models;
 
-class EventModel {
+use PDO;
 
-        public function createEvent($event_name, $stock, $event_price, $event_date, $event_location, $gambar, $vid) {
-        global $db;
+class EventModel extends Model {
+
+    public function createEvent($event_name, $stock, $event_price, $event_date, $event_location, $gambar, $vid) {
         $success = true;
-    
+
         if ($gambar !== null && isset($gambar['name']) && isset($gambar['tmp_name'])) {
             $imageFilePath = '../assets/images/' . $gambar['name'];
-    
-            // Move the uploaded file to the desired directory
+
             if (move_uploaded_file($gambar['tmp_name'], $imageFilePath)) {
                 echo "File uploaded successfully";
             } else {
@@ -26,8 +25,7 @@ class EventModel {
 
         if ($vid !== null && isset($vid['name']) && isset($vid['tmp_name'])) {
             $vidFilePath = '../assets/videos/' . $vid['name'];
-    
-            // Move the uploaded file to the desired directory
+
             if (move_uploaded_file($vid['tmp_name'], $vidFilePath)) {
                 echo "File uploaded successfully";
             } else {
@@ -43,9 +41,9 @@ class EventModel {
             $success = false;
             return $success;
         }
-    
-        $stmt = $db->prepare("INSERT INTO events (event_name, event_stock, event_price, event_date, event_location, gambar, vid) VALUES (?, ?, ?, ?, ?, ?, ?)");
-    
+
+        $stmt = $this->database->prepare("INSERT INTO events (event_name, event_stock, event_price, event_date, event_location, gambar, vid) VALUES (?, ?, ?, ?, ?, ?, ?)");
+
         if ($stmt->execute([$event_name, $stock, $event_price, $event_date, $event_location, $imageFilePath, $vidFilePath])) {
             echo "Event created successfully";
             return $success;
@@ -55,146 +53,122 @@ class EventModel {
             return $success;
         }
     }
-    
+
     public function updateEvent($event_id, $event_name, $event_price, $event_date, $event_location, $gambar, $vid) {
-        global $db;
-        $db->setAttribute(PDO::ATTR_AUTOCOMMIT, 1);
-    
-        echo "Updating Event with ID: $event_id, Name: $event_name, Price: $event_price, Date: $event_date, Location: $event_location";
-        
+        $sql = "UPDATE events SET event_name = ?, event_price = ?, event_date = ?, event_location = ?";
+
         if ($gambar !== null && isset($gambar['name']) && isset($gambar['tmp_name'])) {
             $imageFilePath = '../assets/images/' . $gambar['name'];
-    
-            // Move the uploaded file to the desired directory
+
             if (move_uploaded_file($gambar['tmp_name'], $imageFilePath)) {
                 echo "File uploaded successfully<br>";
             } else {
                 echo "Error moving file to destination<br>";
                 $imageFilePath = null; // Set to null if there's an error
             }
-        } else {
-            echo "No image uploaded<br>";
-            $imageFilePath = null; // Set to null if no file is uploaded
+
+            $sql .= ", gambar = ?";
         }
 
         if ($vid !== null && isset($vid['name']) && isset($vid['tmp_name'])) {
             $vidFilePath = '../assets/videos/' . $vid['name'];
-    
-            // Move the uploaded file to the desired directory
+
             if (move_uploaded_file($vid['tmp_name'], $vidFilePath)) {
                 echo "File uploaded successfully<br>";
             } else {
                 echo "Error moving file to destination<br>";
                 $vidFilePath = null; // Set to null if there's an error
             }
-        } else {
-            echo "No video uploaded<br>";
-            $vidFilePath = null; // Set to null if no file is uploaded
+
+            $sql .= ", vid = ?";
         }
-        
-        // chek wheter image or video is null or not
-        if ($imageFilePath === null && $vidFilePath === null) {
-            $sql = "UPDATE events SET event_name = '$event_name', event_price = '$event_price', event_date = '$event_date', event_location = '$event_location' WHERE event_id = $event_id";
-        } elseif ($imageFilePath === null) {
-            $sql = "UPDATE events SET event_name = '$event_name', event_price = '$event_price', event_date = '$event_date', event_location = '$event_location', vid = '$vidFilePath' WHERE event_id = $event_id";
-        } elseif ($vidFilePath === null) {
-            $sql = "UPDATE events SET event_name = '$event_name', event_price = '$event_price', event_date = '$event_date', event_location = '$event_location', gambar = '$imageFilePath' WHERE event_id = $event_id";
-        } else {
-            $sql = "UPDATE events SET event_name = '$event_name', event_price = '$event_price', event_date = '$event_date', event_location = '$event_location', gambar = '$imageFilePath', vid = '$vidFilePath' WHERE event_id = $event_id";
+
+        $sql .= " WHERE event_id = ?";
+
+        $stmt = $this->database->prepare($sql);
+
+        $params = [$event_name, $event_price, $event_date, $event_location];
+
+        if ($imageFilePath !== null) {
+            $params[] = $imageFilePath;
+        }
+
+        if ($vidFilePath !== null) {
+            $params[] = $vidFilePath;
         }
-    
-        $rowCount = $db->exec($sql);
-    
+
+        $params[] = $event_id;
+
+        $rowCount = $stmt->execute($params);
+
         if ($rowCount !== false) {
             echo "Event updated successfully. Rows affected: $rowCount";
         } else {
-            echo "Error updating event: " . print_r($db->errorInfo(), true);
+            echo "Error updating event: " . print_r($stmt->errorInfo(), true);
         }
         return "Event updated successfully";
     }
-    
-    
-    
+
     public function deleteEvent($eventId) {
-        global $db;
-    
         try {
-            // Delete associated pembelian records
-            $stmtPembelian = $db->prepare("DELETE FROM pembelian WHERE ticket_id IN (SELECT ticket_id FROM tickets WHERE event_id = ?)");
-            $stmtPembelian->execute([$eventId]);
-    
-            // Delete associated tickets
-            $stmtTickets = $db->prepare("DELETE FROM tickets WHERE event_id = ?");
-            $stmtTickets->execute([$eventId]);
-    
-            // Delete the event
-            $stmtEvent = $db->prepare("DELETE FROM events WHERE event_id = ?");
+            // Delete associated records or perform necessary cleanup
+
+            $stmtEvent = $this->database->prepare("DELETE FROM events WHERE event_id = ?");
             $stmtEvent->execute([$eventId]);
-    
-            echo "Event, associated tickets, and pembelian records deleted successfully<br>";
-    
-            return "Event, associated tickets, and pembelian records deleted successfully";
+
+            echo "Event deleted successfully<br>";
+
+            return "Event deleted successfully";
         } catch (PDOException $e) {
             echo "Error: " . $e->getMessage() . "<br>";
-    
+
             return "Error: " . $e->getMessage();
         }
     }
-    
+
     public function getAllEvents() {
-        global $db;
-        $stmt = $db->prepare("SELECT * FROM events");
+        $stmt = $this->database->prepare("SELECT * FROM events");
         $stmt->execute();
         return $stmt->fetchAll(PDO::FETCH_ASSOC);
     }
 
     public function getEvent($eventId) {
-        global $db;
-        $stmt = $db->prepare("SELECT * FROM events WHERE event_id = ?");
+        $stmt = $this->database->prepare("SELECT * FROM events WHERE event_id = ?");
         $stmt->execute([$eventId]);
         return $stmt->fetch(PDO::FETCH_ASSOC);
     }
 
     public function getLastEventId() {
-        global $db;
-        $stmt = $db->prepare("SELECT event_id FROM events ORDER BY event_id DESC LIMIT 1");
+        $stmt = $this->database->prepare("SELECT event_id FROM events ORDER BY event_id DESC LIMIT 1");
         $stmt->execute();
         return $stmt->fetch(PDO::FETCH_ASSOC)['event_id'];
     }
 
     public function searchEvents($searchQuery, $sortKey, $minStock) {
-        global $db;
-
         try {
-            $sql = "SELECT * FROM events WHERE 1"; // Start with a true condition
+            $sql = "SELECT * FROM events WHERE 1";
 
-            // Add search condition 
             if (!empty($searchQuery)) {
                 $sql .= " AND (LOWER(event_name) LIKE CONCAT('%', :query, '%') OR LOWER(event_location) LIKE CONCAT('%', :query, '%'))";
             }
 
-
-            // Add filter condition 
             if ($minStock !== null) {
                 $sql .= " AND event_stock >= :minStock";
             }
 
-            // Add sort condition
             if ($sortKey === 'name') {
                 $sql .= " ORDER BY event_name ASC";
             } elseif ($sortKey === 'location') {
                 $sql .= " ORDER BY event_location ASC";
             }
 
-            $stmt = $db->prepare($sql);
+            $stmt = $this->database->prepare($sql);
 
-            // Bind search query parameter
             if (!empty($searchQuery)) {
                 $lowerSearchQuery = strtolower("%" . $searchQuery . "%");
                 $stmt->bindParam(':query', $lowerSearchQuery, PDO::PARAM_STR);
             }
 
-            // Bind filter parameter 
             if ($minStock !== null) {
                 $stmt->bindParam(':minStock', $minStock, PDO::PARAM_INT);
             }
@@ -206,11 +180,4 @@ class EventModel {
             throw new Exception("Error searching events: " . $e->getMessage());
         }
     }
-
-    
-
-
 }
-?>
-
-
diff --git a/app/Server/Models/Model.php b/app/Server/Models/Model.php
new file mode 100644
index 0000000000000000000000000000000000000000..fc2fe6b25246c1204f7827f0509c4d012a633c60
--- /dev/null
+++ b/app/Server/Models/Model.php
@@ -0,0 +1,22 @@
+<?php
+
+namespace Server\Models;
+
+use PDO;
+
+class Model {
+    protected $database;
+
+    public function __construct()
+    {
+        $dsn = "pgsql:host=ticketku-php-db;port=5433;dbname=ticketku;";
+        $user = "postgres";
+        $password = "postgres";
+        try {
+            $this->database = new PDO($dsn, $user, $password, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
+        } catch (\PDOException $e) {
+            die($e->getMessage());
+        }
+    }
+
+}
diff --git a/app/Server/Models/Pembelian.php b/app/Server/Models/Pembelian.php
index 0fcf741d91a4773be623aefe0029031038b12efb..ed44a4bbb58d2b0d2228725a1dd768060e74e678 100644
--- a/app/Server/Models/Pembelian.php
+++ b/app/Server/Models/Pembelian.php
@@ -1,16 +1,15 @@
 <?php
-// app/models/Pembelian.php
 
-require_once(__DIR__ . '/../../db/connect.php');
-require_once(__DIR__ . '/../util.php');
+namespace Server\Models;
 
-class PembelianModel {
+use PDO;
+
+class PembelianModel extends Model {
     public function createPembelian($ticketId, $userId, $createdTime) {
-        global $db;
+        $stmt = $this->database->prepare("INSERT INTO pembelian (ticket_id, user_id, pembelian_created_time) VALUES (?, ?, ?)");
 
-        $stmt = $db->prepare("INSERT INTO pembelian (ticket_id, user_id, pembelian_created_time) VALUES (?, ?, ?)");
         if ($stmt->execute([$ticketId, $userId, $createdTime])) {
-            $stmt = $db->prepare("SELECT event_id FROM tickets WHERE ticket_id = ?");
+            $stmt = $this->database->prepare("SELECT event_id FROM tickets WHERE ticket_id = ?");
             $stmt->execute([$ticketId]);
             $result = $stmt->fetch(PDO::FETCH_ASSOC);
 
@@ -18,58 +17,48 @@ class PembelianModel {
                 $eventId = $result['event_id'];
 
                 // Decrement the event's stock by 1
-                $stmt = $db->prepare("UPDATE events SET event_stock = event_stock - 1 WHERE event_id = ?");
+                $stmt = $this->database->prepare("UPDATE events SET event_stock = event_stock - 1 WHERE event_id = ?");
                 return $stmt->execute([$eventId]);
             }
         }
     }
 
     public function getPembelian($pembelianId) {
-        global $db;
-
-        $stmt = $db->prepare("SELECT * FROM pembelian WHERE pembelian_id = ?");
+        $stmt = $this->database->prepare("SELECT * FROM pembelian WHERE pembelian_id = ?");
         $stmt->execute([$pembelianId]);
 
         return $stmt->fetch(PDO::FETCH_ASSOC);
     }
 
     public function updatePembelian($pembelianId, $ticketId, $userId, $createdTime) {
-        global $db;
-
-        $stmt = $db->prepare("UPDATE pembelian SET ticket_id = ?, user_id = ?, pembelian_created_time = ? WHERE pembelian_id = ?");
+        $stmt = $this->database->prepare("UPDATE pembelian SET ticket_id = ?, user_id = ?, pembelian_created_time = ? WHERE pembelian_id = ?");
         $stmt->execute([$ticketId, $userId, $createdTime, $pembelianId]);
 
         return "Pembelian updated successfully";
     }
 
     public function deletePembelian($pembelianId) {
-        global $db;
-
-        $stmt = $db->prepare("DELETE FROM pembelian WHERE pembelian_id = ?");
+        $stmt = $this->database->prepare("DELETE FROM pembelian WHERE pembelian_id = ?");
         $stmt->execute([$pembelianId]);
 
         return "Pembelian deleted successfully";
     }
 
-    public function getAllPembelian(){
-        global $db;
-        $stmt = $db->prepare("SELECT * FROM pembelian");
+    public function getAllPembelian() {
+        $stmt = $this->database->prepare("SELECT * FROM pembelian");
         $stmt->execute();
         return $stmt->fetchAll(PDO::FETCH_ASSOC);
     }
 
-    public function getAllPembelianWithDetails(){
-        global $db;
-        $stmt = $db->prepare("SELECT * FROM pembelian JOIN tickets ON pembelian.ticket_id = tickets.ticket_id JOIN events ON tickets.event_id = events.event_id ORDER BY pembelian_created_time DESC");
+    public function getAllPembelianWithDetails() {
+        $stmt = $this->database->prepare("SELECT * FROM pembelian JOIN tickets ON pembelian.ticket_id = tickets.ticket_id JOIN events ON tickets.event_id = events.event_id ORDER BY pembelian_created_time DESC");
         $stmt->execute();
         return $stmt->fetchAll(PDO::FETCH_ASSOC);
     }
 
-    public function getPembelianByUserId($userId){
-        global $db;
-        $stmt = $db->prepare("SELECT * FROM pembelian JOIN tickets ON pembelian.ticket_id = tickets.ticket_id JOIN events ON tickets.event_id = events.event_id WHERE user_id = ? ORDER BY pembelian_created_time DESC");
+    public function getPembelianByUserId($userId) {
+        $stmt = $this->database->prepare("SELECT * FROM pembelian JOIN tickets ON pembelian.ticket_id = tickets.ticket_id JOIN events ON tickets.event_id = events.event_id WHERE user_id = ? ORDER BY pembelian_created_time DESC");
         $stmt->execute([$userId]);
         return $stmt->fetchAll(PDO::FETCH_ASSOC);
     }
 }
-?>
diff --git a/app/Server/Models/Ticket.php b/app/Server/Models/Ticket.php
index 4060c6ede2da98c4e084c8bef084f05fe8651aa4..388049a1f4b367092fa931cac237df96dcba19e0 100644
--- a/app/Server/Models/Ticket.php
+++ b/app/Server/Models/Ticket.php
@@ -1,59 +1,47 @@
 <?php
-// app/models/Ticket.php
 
-require_once(__DIR__ . '/../../db/connect.php');
+namespace Server\Models;
 
+use PDO;
 
-class TicketModel {
+class TicketModel extends Model {
     public function createTicket($name, $eventId) {
-        global $db;
-
-        $stmt = $db->prepare("INSERT INTO tickets (ticket_name, event_id) VALUES (?, ?)");
+        $stmt = $this->database->prepare("INSERT INTO tickets (ticket_name, event_id) VALUES (?, ?)");
         $stmt->execute([$name, $eventId]);
 
         return "Ticket created successfully";
     }
 
     public function getTicket($ticketId) {
-        global $db;
-
-        $stmt = $db->prepare("SELECT * FROM tickets WHERE ticket_id = ?");
+        $stmt = $this->database->prepare("SELECT * FROM tickets WHERE ticket_id = ?");
         $stmt->execute([$ticketId]);
 
         return $stmt->fetch(PDO::FETCH_ASSOC);
     }
 
     public function updateTicket($ticketId, $name, $eventId) {
-        global $db;
-
-        $stmt = $db->prepare("UPDATE tickets SET ticket_name = ?, event_id = ? WHERE ticket_id = ?");
+        $stmt = $this->database->prepare("UPDATE tickets SET ticket_name = ?, event_id = ? WHERE ticket_id = ?");
         $stmt->execute([$name, $eventId, $ticketId]);
 
         return "Ticket updated successfully";
     }
 
     public function updateTicketByEventId($eventId, $name) {
-        global $db;
-
-        $stmt = $db->prepare("UPDATE tickets SET ticket_name = ? WHERE event_id = ?");
+        $stmt = $this->database->prepare("UPDATE tickets SET ticket_name = ? WHERE event_id = ?");
         $stmt->execute([$name, $eventId]);
 
         return "Ticket updated successfully";
     }
 
     public function deleteTicket($ticketId) {
-        global $db;
-
-        $stmt = $db->prepare("DELETE FROM tickets WHERE ticket_id = ?");
+        $stmt = $this->database->prepare("DELETE FROM tickets WHERE ticket_id = ?");
         $stmt->execute([$ticketId]);
 
         return "Ticket deleted successfully";
     }
 
     public function getSmallestAvailableTicket($eventId) {
-        global $db;
-
-        $stmt = $db->prepare("
+        $stmt = $this->database->prepare("
             SELECT t.*, e.*
             FROM tickets t
             JOIN events e ON t.event_id = e.event_id
@@ -73,4 +61,3 @@ class TicketModel {
         return $stmt->fetch(PDO::FETCH_ASSOC);
     }
 }
-?>
diff --git a/app/Server/Models/User.php b/app/Server/Models/User.php
index cb3410b23a9c471bcbdda9d7cdec126657941759..43d1dc9d132c4d9fb2d9c41e58246d66eb30a63b 100644
--- a/app/Server/Models/User.php
+++ b/app/Server/Models/User.php
@@ -1,20 +1,18 @@
 <?php
-// app/models/User.php
 
-require_once(__DIR__ . '/../../db/connect.php');
+namespace Server\Models;
 
+use PDO;
 
-class UserModel {
+class UserModel extends Model {
     public function createUser($name, $username, $email, $hashedPass, $isAdmin) {
-        global $db;
-
         $response = [
             'success'=> true,
             'message'=> ''
         ];
     
         try {
-            $stmt = $db->prepare("INSERT INTO users (user_name, username, user_email, user_hashedPass, isAdmin) VALUES (?, ?, ?, ?, ?)");
+            $stmt = $this->database->prepare("INSERT INTO users (user_name, username, user_email, user_hashedPass, isAdmin) VALUES (?, ?, ?, ?, ?)");
             $stmt->execute([$name, $username, $email, $hashedPass, $isAdmin]);
             $response['message'] = "User created successfully";
             return $response;
@@ -36,9 +34,7 @@ class UserModel {
 
     // User.php
     public function getUser($userId) {
-        global $db;
-
-        $stmt = $db->prepare("SELECT * FROM users WHERE user_ID = ?");
+        $stmt = $this->database->prepare("SELECT * FROM users WHERE user_ID = ?");
         $stmt->execute([$userId]);
 
         if ($stmt) {
@@ -56,54 +52,41 @@ class UserModel {
     }
 
     public function getUserByEmail($email) {
-        global $db;
-
-        $stmt = $db->prepare("SELECT * FROM users WHERE user_email = ?");
+        $stmt = $this->database->prepare("SELECT * FROM users WHERE user_email = ?");
         $stmt->execute([$email]);
 
         return $stmt->fetch(PDO::FETCH_ASSOC);
     }
 
     public function getUserByUsername($username){
-        global $db;
-
-        $stmt = $db->prepare("SELECT * FROM users WHERE username = ?");
+        $stmt = $this->database->prepare("SELECT * FROM users WHERE username = ?");
         $stmt->execute([$username]);
 
         return $stmt->fetch(PDO::FETCH_ASSOC);
     }
 
     public function updateUser($userId, $name, $username, $email, $hashedPass, $isAdmin) {
-        global $db;
-
-        $stmt = $db->prepare("UPDATE users SET user_name = ?, username = ?, user_email = ?, user_hashedPass = ?, isAdmin = ? WHERE user_ID = ?");
+        $stmt = $this->database->prepare("UPDATE users SET user_name = ?, username = ?, user_email = ?, user_hashedPass = ?, isAdmin = ? WHERE user_ID = ?");
         $stmt->execute([$name, $username, $email, $hashedPass, $isAdmin, $userId]);
 
         return "User updated successfully";
     }
 
     public function editProfile($userId, $name, $username, $email) {
-        global $db;
-
-        $stmt = $db->prepare("UPDATE users SET user_name = ?, username = ?, user_email = ? WHERE user_id = ?");
+        $stmt = $this->database->prepare("UPDATE users SET user_name = ?, username = ?, user_email = ? WHERE user_id = ?");
         return $stmt->execute([$name, $username, $email, $userId]);
     }
 
     public function deleteUser($userId) {
-        global $db;
-
-        $stmt = $db->prepare("DELETE FROM users WHERE user_ID = ?");
+        $stmt = $this->database->prepare("DELETE FROM users WHERE user_ID = ?");
         $stmt->execute([$userId]);
 
         return "User deleted successfully";
     }
 
     public function getAllUsers() {
-        global $db;
-
-        $stmt = $db->query("SELECT * FROM users");
+        $stmt = $this->database->query("SELECT * FROM users");
         return $stmt->fetchAll(PDO::FETCH_ASSOC);
     }
-
 }
 ?>