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;
     }