From 3216b9f95b46fd04eeb5b3bc794405e451451983 Mon Sep 17 00:00:00 2001 From: SulthanDA28 <13521159@std.stei.itb.ac.id> Date: Wed, 15 Nov 2023 16:34:46 +0700 Subject: [PATCH] add api analytic --- .../User/GetDataPostController.php | 45 ++++++ .../User/GetDataPostIDController.php | 46 +++++++ .../controllers/User/GetFollowsController.php | 45 ++++++ src/app/models/GetPostModel.php | 130 ++++++++++++++++++ src/index.php | 6 + 5 files changed, 272 insertions(+) create mode 100644 src/app/controllers/User/GetDataPostController.php create mode 100644 src/app/controllers/User/GetDataPostIDController.php create mode 100644 src/app/controllers/User/GetFollowsController.php create mode 100644 src/app/models/GetPostModel.php diff --git a/src/app/controllers/User/GetDataPostController.php b/src/app/controllers/User/GetDataPostController.php new file mode 100644 index 0000000..068f463 --- /dev/null +++ b/src/app/controllers/User/GetDataPostController.php @@ -0,0 +1,45 @@ +<?php + + + +require_once SRC_ROOT_PATH . "/app/baseclasses/BaseController.php"; +require_once SRC_ROOT_PATH . "/app/models/GetPostModel.php"; + +class GetDataPostController extends BaseController{ + protected static $instance; + private function __construct($srv){ + parent::__construct($srv); + } + public static function getInstance(){ + if(!isset(self::$instance)){ + self::$instance = new static(GetPostModel::getInstance()); + } + return self::$instance; + } + + public function get($urlParams){ + $idowner = $urlParams[0]; + $data = $this->srv->getDataPostByOwner($idowner); + if($data!=null){ + header('Content-Type: application/json'); + return json_encode(array( + 'status' => 'success', + 'message' => 'Success to get data post', + 'data' => $data + )); + } + else{ + header('Content-Type: application/json'); + return json_encode(array( + 'status' => 'failed', + 'message' => 'Failed to get data post', + )); + } + } + +} + + + + +?> \ No newline at end of file diff --git a/src/app/controllers/User/GetDataPostIDController.php b/src/app/controllers/User/GetDataPostIDController.php new file mode 100644 index 0000000..66252ea --- /dev/null +++ b/src/app/controllers/User/GetDataPostIDController.php @@ -0,0 +1,46 @@ +<?php + + + +require_once SRC_ROOT_PATH . "/app/baseclasses/BaseController.php"; +require_once SRC_ROOT_PATH . "/app/models/GetPostModel.php"; + +class GetDataPostIDController extends BaseController{ + protected static $instance; + private function __construct($srv){ + parent::__construct($srv); + } + public static function getInstance(){ + if(!isset(self::$instance)){ + self::$instance = new static(GetPostModel::getInstance()); + } + return self::$instance; + } + + public function get($urlParams){ + $idowner = $urlParams[0]; + $idpost = $urlParams[1]; + $data = $this->srv->getDataPostIDByOwner($idowner,$idpost); + if($data!=null){ + header('Content-Type: application/json'); + return json_encode(array( + 'status' => 'success', + 'message' => 'Success to get data post', + 'data' => $data + )); + } + else{ + header('Content-Type: application/json'); + return json_encode(array( + 'status' => 'failed', + 'message' => 'Failed to get data post', + )); + } + } + +} + + + + +?> \ No newline at end of file diff --git a/src/app/controllers/User/GetFollowsController.php b/src/app/controllers/User/GetFollowsController.php new file mode 100644 index 0000000..89f9e7c --- /dev/null +++ b/src/app/controllers/User/GetFollowsController.php @@ -0,0 +1,45 @@ +<?php + + + +require_once SRC_ROOT_PATH . "/app/baseclasses/BaseController.php"; +require_once SRC_ROOT_PATH . "/app/models/GetPostModel.php"; + +class GetFollowsController extends BaseController{ + protected static $instance; + private function __construct($srv){ + parent::__construct($srv); + } + public static function getInstance(){ + if(!isset(self::$instance)){ + self::$instance = new static(GetPostModel::getInstance()); + } + return self::$instance; + } + + public function get($urlParams){ + $idowner = $urlParams[0]; + $data = $this->srv->getFollows($idowner); + if($data!=null){ + header('Content-Type: application/json'); + return json_encode(array( + 'status' => 'success', + 'message' => 'Success to get data follows', + 'data' => $data + )); + } + else{ + header('Content-Type: application/json'); + return json_encode(array( + 'status' => 'failed', + 'message' => 'Failed to get data follows', + )); + } + } + +} + + + + +?> \ No newline at end of file diff --git a/src/app/models/GetPostModel.php b/src/app/models/GetPostModel.php new file mode 100644 index 0000000..f28ed02 --- /dev/null +++ b/src/app/models/GetPostModel.php @@ -0,0 +1,130 @@ +<?php + +require_once SRC_ROOT_PATH . "/app/baseclasses/BaseModel.php"; +require_once SRC_ROOT_PATH . "/app/core/PDOHandler.php"; + +class GetPostModel +{ + protected static $instance; + + + public static function getInstance() + { + if (!isset(self::$instance)) { + self::$instance = new static(); + } + return self::$instance; + } + + public function getFollows($id){ + try{ + $db = PDOHandler::getInstance()->getPDO(); + $sql = "SELECT DATE(created_at) as day, COUNT(followed_user_id) as total from follows WHERE followed_user_id=$id GROUP BY day ORDER BY day DESC LIMIT 7;"; + $result = $db->query($sql); + if($result){ + $data = $result->fetchAll(PDO::FETCH_ASSOC); + return $data; + } + else{ + return null; + } + }catch(Exception $e){ + echo $e->getMessage(); + return null; + } + } + public function getDataPostByOwner($owner){ + try{ + $db = PDOHandler::getInstance()->getPDO(); + $sql = "SELECT p.post_id,u.id,u.username,u.profile_name,p.body,pr.path,p.created_at FROM posts as p LEFT JOIN post_resources as pr ON p.post_id=pr.post_id AND p.owner_id=pr.post_owner_id JOIN users as u ON p.owner_id=u.id WHERE p.owner_id=$owner AND p.refer_type IS NULL "; + $result = $db->query($sql); + $sql2 = "SELECT DATE(created_at) as day, COUNT(post_id) as total from posts WHERE refer_post_owner=$owner AND refer_type='Reply' GROUP BY day ORDER BY day DESC LIMIT 7"; + $result2 = $db->query($sql2); + $sql3 = "SELECT DATE(created_at) as day, COUNT(post_id) as total from likes WHERE post_owner_id=$owner GROUP BY day ORDER BY day DESC LIMIT 7"; + $result3 = $db->query($sql3); + $sql4 = "SELECT DATE(created_at) as day, SUM(views) as total from posts WHERE owner_id=$owner GROUP BY day ORDER BY day DESC LIMIT 7"; + $result4 = $db->query($sql4); + if($result){ + if($result2){ + if($result3){ + if($result4){ + $data = $result->fetchAll(PDO::FETCH_ASSOC); + $data2 = $result2->fetchAll(PDO::FETCH_ASSOC); + $data3 = $result3->fetchAll(PDO::FETCH_ASSOC); + $data4 = $result4->fetchAll(PDO::FETCH_ASSOC); + return array( + 'post' => $data, + 'reply' => $data2, + 'likes' => $data3, + 'view' => $data4 + ); + } + else{ + return null; + } + } + else{ + return null; + } + } + else{ + return null; + } + } + else{ + return null; + } + }catch(Exception $e){ + echo $e->getMessage(); + return null; + } + } + public function getDataPostIDByOwner($owner,$post_id){ + try{ + $db = PDOHandler::getInstance()->getPDO(); + $sql = "SELECT p.post_id,u.id,u.username,u.profile_name,p.body,pr.path,p.created_at FROM posts as p LEFT JOIN post_resources as pr ON p.post_id=pr.post_id AND p.owner_id=pr.post_owner_id JOIN users as u ON p.owner_id=u.id WHERE p.owner_id=$owner AND p.post_id=$post_id AND p.refer_type IS NULL "; + $result = $db->query($sql); + $sql2 = "SELECT DATE(created_at) as day, COUNT(post_id) as total from posts WHERE refer_post_owner=$owner AND refer_post=$post_id AND refer_type='Reply' GROUP BY day ORDER BY day DESC LIMIT 7"; + $result2 = $db->query($sql2); + $sql3 = "SELECT DATE(created_at) as day, COUNT(post_id) as total from likes WHERE post_owner_id=$owner AND post_id=$post_id GROUP BY day ORDER BY day DESC LIMIT 7"; + $result3 = $db->query($sql3); + $sql4 = "SELECT DATE(created_at) as day, views as total from posts WHERE owner_id=$owner AND post_id=$post_id"; + $result4 = $db->query($sql4); + if($result){ + if($result2){ + if($result3){ + if($result4){ + $data = $result->fetch(PDO::FETCH_ASSOC); + $data2 = $result2->fetchAll(PDO::FETCH_ASSOC); + $data3 = $result3->fetchAll(PDO::FETCH_ASSOC); + $data4 = $result4->fetch(PDO::FETCH_ASSOC); + return array( + 'post' => $data, + 'reply' => $data2, + 'likes' => $data3, + 'view' => $data4 + ); + } + else{ + return null; + } + } + else{ + return null; + } + } + else{ + return null; + } + } + else{ + return null; + } + }catch(Exception $e){ + echo $e->getMessage(); + return null; + } + } +} + +?> \ No newline at end of file diff --git a/src/index.php b/src/index.php index 99b4e95..1dc6492 100644 --- a/src/index.php +++ b/src/index.php @@ -12,6 +12,9 @@ require_once CONTROLLER_PATH . "/User/LoginController.php"; require_once CONTROLLER_PATH . "/User/LogoutController.php"; require_once CONTROLLER_PATH . "/User/RegisterController.php"; require_once CONTROLLER_PATH . "/User/GetAllUserController.php"; +require_once CONTROLLER_PATH . "/User/GetFollowsController.php"; +require_once CONTROLLER_PATH . "/User/GetDataPostController.php"; +require_once CONTROLLER_PATH . "/User/GetDataPostIDController.php"; require_once CONTROLLER_PATH . "/Admin/AdminController.php"; require_once CONTROLLER_PATH . "/Admin/BanController.php"; require_once CONTROLLER_PATH . "/Admin/UnbanController.php"; @@ -66,6 +69,9 @@ $router->addHandler("/api/profileuser/*", ProfileUserController::getInstance(), $router->addHandler("/api/follow", FollowController::getInstance(), []); $router->addHandler("/api/unfollow", UnfollowController::getInstance(), []); $router->addHandler("/api/getalluser", GetAllUserController::getInstance(), []); +$router->addHandler("/api/getdatafollows/*", GetFollowsController::getInstance(), []); +$router->addHandler("/api/getdatapost/*", GetDataPostController::getInstance(), []); +$router->addHandler("/api/getdatapostid/*/*", GetDataPostIDController::getInstance(), []); $router->addHandler("/", HomePage::getInstance(), []); -- GitLab