diff --git a/app/controller/book/BookDb.php b/app/controller/book/BookDb.php index 6386e4d44b4ac02f1597d0b9d4641acc2aced0cf..2ece952fa57335383d5003a3487b341d39592f61 100644 --- a/app/controller/book/BookDb.php +++ b/app/controller/book/BookDb.php @@ -45,6 +45,21 @@ return $books; } + + function updateRating($book_id, $rating, $banyak_review) { + $books = $this->getBookById($book_id); + $now_rating = $books[0]->rating; + $new_rating = ((float)($now_rating * $banyak_review + $rating) / (float)($banyak_review + 1)); + + $book = null; + $sql = "UPDATE book SET rating = ? where book_id = ?"; + $stmt = $this->conn->prepare($sql); + if ($stmt->execute([$new_rating, $book_id])) { + $book = new Book($book_id, null, null, null, $new_rating); + } + + return $book; + } } ?> \ No newline at end of file diff --git a/app/controller/review/ReviewDb.php b/app/controller/review/ReviewDb.php index 2bc0316ce509387bc7ca9f5d5ade89e72dd1bd01..9db0468cd5e98086e52c267506bd12ea3f7b826f 100644 --- a/app/controller/review/ReviewDb.php +++ b/app/controller/review/ReviewDb.php @@ -1,19 +1,31 @@ <?php require_once __ROOT__."/util/Database.php"; require_once __ROOT__."/app/controller/review/Review.php"; + require_once __ROOT__."/app/controller/book/BookDb.php"; class ReviewDb extends Database { function __construct(PDO $conn) { parent::__construct($conn); } + function getReviewsCount($book_id) { + $banyak_review = 0; + + $sql = 'SELECT COUNT(*) AS banyak_review FROM review where book_id = ?'; + $stmt = $this->conn->prepare($sql); + if ($stmt->execute([$book_id])) { + $row = $stmt->fetch(); + $banyak_review = (int)$row["banyak_review"]; + }; + + return $banyak_review; + } + function getReviewsByBookId($book_id) { - $user_id = $_COOKIE["user_id"]; - $reviews = []; - $sql = 'SELECT * FROM review WHERE user_id = ? AND book_id = ?'; + $sql = 'SELECT * FROM review WHERE book_id = ?'; $stmt = $this->conn->prepare($sql); - $stmt->execute([$user_id, $book_id]); + $stmt->execute([$book_id]); while ($row = $stmt->fetch()) { $review_id = (int) $row["review_id"]; @@ -27,6 +39,26 @@ } return $reviews; } + + function createReview($review) { + $reviewRes = null; + $sql = 'INSERT INTO review(user_id, book_id, content, rating) VALUES(?,?,?,?)'; + $stmt = $this->conn->prepare($sql); + if ($stmt->execute([$review->user_id, $review->book_id, $review->content, $review->rating])) { + $review_id = 0; + $last_insert_id = $this->conn->query("SELECT LAST_INSERT_ID()"); + foreach($last_insert_id as $row) { + $review_id = $row["LAST_INSERT_ID()"]; + }; + $reviewRes = new Review($review_id, $review->user_id, $review->book_id, $review->content, $review->rating); + + $banyak_review = $this->getReviewsCount($review->book_id); + $bookDb = new BookDb($this->conn); + $bookRes = $bookDb->updateRating($review->book_id, $review->rating, $banyak_review); + } + + return $reviewRes; + } } ?> \ No newline at end of file diff --git a/app/controller/review/ReviewUsecase.php b/app/controller/review/ReviewUsecase.php index 042edd193e41ca59194c2faaf8c0812b2d9c2aa2..4899e691031b95d548e151c0dc1d6ffadbd3925d 100644 --- a/app/controller/review/ReviewUsecase.php +++ b/app/controller/review/ReviewUsecase.php @@ -13,5 +13,20 @@ $reviews = $this->reviewDb->getReviewsByBookId($book_id); writeResponse(200, "Success get reviews by book id : %" + $book_id + "%", $reviews); } + + function addReview(Request $request) { + $user_id = (int)$request->payload["userid"]; + $book_id = (int)$request->payload["bookid"]; + $content = $request->payload["content"]; + $rating = (int)$request->payload["rating"]; + + $review = new Review(null, $user_id, $book_id, $content, $rating); + $review = $this->reviewDb->createReview($review); + if ($review) { + writeResponse(200, "Success add review", $review); + } else { + writeResponse(500, "Failed add review"); + } + } } ?> \ No newline at end of file diff --git a/app/controller/review/routes.php b/app/controller/review/routes.php index f37b8c6a0ebd5c2affe4756548ff7f51b05c5a27..ea38ae678e9a1e5c0540314367980492f9152372 100644 --- a/app/controller/review/routes.php +++ b/app/controller/review/routes.php @@ -1,6 +1,7 @@ <?php function addReviewRoutes($router, $reviewUsecase){ $router->add("/api/review/reviews/:book_id/", "GET", array($reviewUsecase,'getReviews')); + $router->add("/api/review/", "POST", array($reviewUsecase, 'addReview')); return $router; }