示例#1
0
def book(isbn):
    user = session.get("user_id")
    try:
        row = db.execute("SELECT * FROM books WHERE isbn=:isbn;", {
            "isbn": isbn
        }).fetchone()
    except Exception as e:
        return '<div> <a href="/signup">Error No book found Go back</a></div>'

    if row is None:
        flash("no book found", category="error")
        return '<div> <a href="/signup">Error No book found Go back</a></div>'
    print("row here", row)

    book = Book(row[0],
                row[1],
                row[2],
                row[3],
                row[4],
                reviewCount=row[5] or 0,
                average=row[6] or 0.0,
                sum=row[7] or 0)
    # book = Book(row[0], row[1], row[2], row[3], row[4])
    print("))))))))))) book", book.__repr__())
    reviews = []

    # a variable to check whether the user have a review or not
    newReview = False
    userHasRev = False
    userReview = None
    try:
        user_review = db.execute(
            "SELECT * FROM reviews WHERE book_id=:book_id AND user_id=:user_id",
            {
                "book_id": book.id,
                "user_id": session["user_id"]
            }).fetchone()
        if (user_review):
            userReview = Review(user_review[0], user_review[1], user_review[2],
                                user_review[3], user_review[4], user_review[4])
            reviews.append(userReview)
            # userHasRev = True
        print("---------->usrRev", user_review)
        revRow = db.execute("SELECT * FROM reviews WHERE book_id=:book_id ", {
            "book_id": book.id
        }).fetchall()
        print("***revs", revRow)
        for r in revRow:
            rev = Review(r[0], r[1], r[2], r[3], r[4], r[5])
            reviews.append(rev)
        print("8888888", reviews)
    except Exception as e:
        flash('1 Error:{}'.format(e), category="error")
        flash('Review error ', category="error")
        return render_template("book.html",
                               hasReview=userHasRev,
                               reviews=reviews,
                               book=vars(book),
                               user=user,
                               userReview=userReview)

    print("pooooost")
    # ============================================= POST METHOD ===================
    if request.method == 'POST':
        print("============here")
        if not userHasRev:
            starRating = request.form.get('rating')
            comment = request.form.get('comment')
            review_rating = int(starRating)

            usrName = ""
            userId = 0
            try:
                userId = session["user_id"]
                usrName = session["usrname"]
            except Exception as e:
                print(e)
                usrName = ""

            try:
                db.execute(
                    "INSERT INTO reviews (user_id, book_id, rating, review) VALUES (:user_id, :book_id, :rating, :review);",
                    {
                        "user_id": userId,
                        "book_id": book.id,
                        "rating": review_rating,
                        "review": comment
                    })

                newCount = book.review_count + 1
                newSum = book.ratings_sum + review_rating
                newAverage = newSum / newCount

                db.execute(
                    "UPDATE books SET review_count=:count, ratings_sum=:sum, average_reviews=:average WHERE id=:isbn",
                    {
                        "count": newCount,
                        "sum": newSum,
                        "average": newAverage,
                        "isbn": book.isbn
                    })

                db.commit()
                print("iiiiiiiiiiiiiiiiii")

                revew = Review(0, session["user_id"], book.id, review_rating,
                               comment, usrName)
                reviews.insert(0, revew)

                book.review_count = newCount
                book.ratings_sum = newSum
                book.average_reviews = newAverage

                flash("review success", category="success")
                userHasRev = True
                newReview = True

                print("------------here2")
            except Exception as e:
                flash('Review not added ,   Error:{}, '.format(e),
                      category="error")
                return render_template("book.html",
                                       user=user,
                                       book=vars(book),
                                       reviews=reviews,
                                       hasReview=userHasRev,
                                       isbn=book.isbn,
                                       userReview=userReview)
        if userHasRev and (not newReview):
            flash("review already exist", category="error")

    api_data = {}
    # api_data = getApiData(isbn)
    # if not api_data:
    #     api_data = {'subjects': ['subjects cannot be found']}
    if api_data is not None:
        book = vars(book)
        book.update(api_data)
    return render_template("book.html",
                           book=book,
                           reviews=reviews,
                           hasReview=userHasRev,
                           isbn=book["isbn"],
                           user=user,
                           userReview=userReview)