Exemple #1
0
def register():
    message = None
    reg_form = RegistrationForm()
    login_form = LoginForm()

    if request.method == 'GET':
        return render_template('register.html',
                               reg_form=reg_form,
                               login_form=login_form)

    if request.method == 'POST':
        if reg_form.validate_on_submit():
            hashed_password = bcrypt.generate_password_hash(
                reg_form.password.data).decode('utf-8')
            dbSession.execute(
                "INSERT INTO users (username, email, password) VALUES (:username, :email, :password)",
                {
                    "username": reg_form.username.data,
                    "email": reg_form.email.data,
                    "password": hashed_password
                })
            dbSession.commit()
            return jsonify({'success': 'Registration Successful'})

    return jsonify({'errors': reg_form.errors})
Exemple #2
0
def addreview():
    if request.method == 'POST':
        req_data = request.get_json()
        rate = req_data['rate']
        text = req_data['text']
        userId = req_data['userId']
        bookId = req_data['bookId']
        dt = datetime.datetime.now()

        dbSession.execute(
            "INSERT INTO reviews (content, date_posted, user_id, book_id, rating) VALUES (:content, :date_posted, :user_id, :book_id, :rating)",
            {
                "content": text,
                "date_posted": dt,
                "user_id": userId,
                "book_id": bookId,
                "rating": rate
            })
        dbSession.commit()
        # LOGIC: one user can only review 1x on a book, so if we can query the book here,
        # provided with user id and book id, we retrieve the users' review
        reviewByUser = dbSession.execute(
            "SELECT u.username, r.* FROM users AS u JOIN reviews AS r ON u.id = r.user_id WHERE book_id = :book_id AND user_id = :user_id",
            {
                "book_id": bookId,
                "user_id": userId
            }).fetchone()

        return jsonify(dict(reviewByUser))
Exemple #3
0
 def validate_username(self, username):
     user = dbSession.execute(
         "SELECT * FROM users WHERE username = :username", {
             "username": username.data
         }).fetchone()
     if user:
         raise ValidationError('Username already taken.')
Exemple #4
0
 def validate_email(self, email):
     user = dbSession.execute(
         "SELECT * FROM users WHERE email = :email",
         {"email": email.data}
     ).fetchone()
     if user is None:
         raise ValidationError('Incorrect Email.')
Exemple #5
0
 def validate_email(self, email):
     user = dbSession.execute(
         "SELECT * FROM users WHERE email = :email",
         {"email": email.data}
     ).fetchone()
     if user:
         raise ValidationError('Email already taken.')
Exemple #6
0
def load_logged_in_user():
    user_id = session.get('user_id')
    if user_id is None:
        g.user = None
    else:
        g.user = dbSession.execute("SELECT * FROM users WHERE id = :id", {
            "id": user_id
        }).fetchone()
        dbSession.close()
Exemple #7
0
 def validate(self):
     if not super(LoginForm, self).validate():
         return False
     user = dbSession.execute("SELECT * FROM users WHERE email = :email", {
         "email": self.email.data
     }).fetchone()
     if not bcrypt.check_password_hash(user.password, self.password.data):
         self.password.errors.append('Incorrect Password.')
         return False
     return True
Exemple #8
0
def search():
    if request.method == 'POST':
        text = request.form.get("searchText")
        result = dbSession.execute(
            "SELECT * FROM books WHERE (LOWER(isbn) LIKE LOWER(:text)) OR (LOWER(title) LIKE LOWER(:text)) OR (author LIKE LOWER(:text)) LIMIT 10",
            {
                "text": '%' + text + '%'
            }).fetchall()
        data = []
        for row in result:
            data.append(dict(row))

        return jsonify({'data': data})
def login():
    login_form = LoginForm()
    reg_form = RegistrationForm()

    if request.method == 'GET':
        return render_template('login.html', login_form=login_form,  reg_form=reg_form)

    if request.method == 'POST':
        user = dbSession.execute(
            "SELECT * FROM users WHERE email = :email",
            {"email": login_form.email.data}
        ).fetchone()
        dbSession.close()
        if login_form.validate_on_submit():
            session.clear()
            session['user_id'] = user['id'] #add user id on session
            return jsonify({'success': 'Login Successful'})
    return jsonify({'errors': login_form.errors})
Exemple #10
0
def api(isbn):

    if request.method == 'GET':

        voted = None
        userId = session.get('user_id')
        reviews = None

        book = dbSession.execute("SELECT * FROM books WHERE isbn = :isbn", {
            "isbn": isbn
        }).fetchone()

        if book is not None:

            api_key = "TrD1hjMJeKCvkiU9xvh5Q"

            goodreads_review_data = requests.get(
                "https://www.goodreads.com/book/review_counts.json",
                params={
                    "key": str(api_key),
                    "isbns": str(isbn)
                },
            ).json()['books'][0]

            if user is not None:
                voted = bool(user)

        else:
            abort(404)

        return jsonify({
            "title": book['title'],
            "author": book['author'],
            "year": book['publication_year'],
            "isbn": book['isbn'],
            "review_count": 28,  #FROM THIS WEBSITE  \ NOT ON GOODREADS
            "average_score": 5.0  #FROM THIS WEBSITE / NOT ON GOODREADS
        })
Exemple #11
0
def book(isbn):

    login_form = LoginForm()
    reg_form = RegistrationForm()

    if request.method == 'GET':

        voted = None
        userId = session.get('user_id')
        reviews = None

        book = dbSession.execute("SELECT * FROM books WHERE isbn = :isbn", {
            "isbn": isbn
        }).fetchone()

        if book is not None:

            page, per_page, offset = get_page_args(
                page_parameter='page', per_page_parameter='per_page')

            pagination_reviews = dbSession.execute(
                "SELECT u.username, r.* FROM users AS u JOIN reviews AS r ON u.id = r.user_id WHERE book_id = :book_id LIMIT :items_per_page OFFSET (:page * :items_per_page)",
                {
                    "book_id": book['id'],
                    "items_per_page": per_page,
                    "page": page - 1
                }).fetchall()

            totalReviewRows = dbSession.execute(
                "SELECT COUNT(*) FROM reviews WHERE book_id = :book_id", {
                    "book_id": book['id']
                }).fetchone()[0]

            reviewsData = []

            pagination = Pagination(page=page,
                                    per_page=per_page,
                                    total=totalReviewRows,
                                    css_framework='bootstrap4')

            for row in pagination_reviews:
                reviewsData.append(dict(row))

            api_key = "TrD1hjMJeKCvkiU9xvh5Q"

            goodreads_review_data = requests.get(
                "https://www.goodreads.com/book/review_counts.json",
                params={
                    "key": str(api_key),
                    "isbns": str(isbn)
                },
            ).json()['books'][0]

            user = dbSession.execute(
                "SELECT * FROM reviews WHERE book_id = :book_id AND user_id = :user_id",
                {
                    "book_id": book['id'],
                    "user_id": userId
                }).fetchone()

            if user is not None:
                voted = bool(user)

        else:
            abort(404)

        return render_template(
            "book.html",
            book=book,
            reviews=reviewsData,
            voted=voted,
            login_form=login_form,
            reg_form=reg_form,
            page=page,
            per_page=per_page,
            pagination=pagination,
            goodreads_review_data=goodreads_review_data,
        )
def book(isbn):

    login_form = LoginForm()
    reg_form = RegistrationForm()

    if request.method == 'GET':

        voted = None
        userId = session.get('user_id')
        reviews = None

        book = dbSession.execute(
            "SELECT * FROM books WHERE isbn = :isbn",
            { "isbn": isbn }
        ).fetchone()

        user = dbSession.execute(
            "SELECT * FROM reviews WHERE book_id = :book_id AND user_id = :user_id",
            { "book_id": book['id'], "user_id": userId }
        ).fetchone()

        if user is not None:
            voted=bool(user)

        if book is not None:

            page, per_page, offset = get_page_args(page_parameter='page', per_page_parameter='per_page')

            print ("page = {} ".format(page))
            print ("per_page = {} ".format(per_page))
            print ("offset = {} ".format(offset))

            pagination_reviews = dbSession.execute(
                "SELECT u.username, r.* FROM users AS u JOIN reviews AS r ON u.id = r.user_id WHERE book_id = :book_id LIMIT :items_per_page OFFSET (:page * :items_per_page)",
                { "book_id": book['id'], "items_per_page": per_page, "page": page - 1 }
            ).fetchall()

            print ("pagination_reviews = {} ".format(pagination_reviews))

            totalReviewRows =  dbSession.execute(
                "SELECT COUNT(*) FROM reviews WHERE book_id = :book_id",
                { "book_id": book['id'] }
            ).fetchone()[0]

            print ("totalReviewRows = {} ".format(totalReviewRows))

            reviewsData = []

            pagination = Pagination(page=page, per_page=per_page, total=totalReviewRows, css_framework='bootstrap4')

            for row in pagination_reviews:
                reviewsData.append(dict(row))
        
        dbSession.close()
        
        return render_template(
            "book.html",
            book=book,
            reviews=reviewsData,
            voted=voted,
            login_form=login_form, 
            reg_form=reg_form,
            page=page,
            per_page=per_page,
            pagination=pagination,
        )