Exemple #1
0
def add_user_book():
    """Adds a new book to a user's books"""
    if session.get("user"):
        user_id = session["user"]
        label = request.json.get("label")
        book_dict = request.json.get("book")
        
        isbn = book_dict["id"]

        book = crud.get_book_by_isbn(isbn)
        category = crud.get_category_by_label(user_id, label)
        
        if not book:
            book = crud.create_book(isbn, 
                                        book_dict["volumeInfo"]["title"], 
                                        book_dict["volumeInfo"]["authors"], 
                                        book_dict["volumeInfo"]["description"], 
                                        book_dict["volumeInfo"]["pageCount"], 
                                        book_dict["volumeInfo"]["imageLinks"]["thumbnail"])

        if not category:
            category = crud.create_category(user_id, label)

            added_books = crud.create_book_category(book, category)
            return jsonify ({"success": f"""A new category, {category.label}, has been added to your bookshelf and {book.title} has been added to it"""})

        if book in crud.get_all_books_in_category(user_id, label):
            return jsonify ({"error": f"{book.title} is already in your {category.label} books"})

        added_books = crud.create_book_category(book, category)
        # Right now, added_books is a list of all of the book objects in category
        
        return jsonify ({"success": f"{book.title} has been added to {category.label} books"})
Exemple #2
0
def update_event_books():
    """Updates the status of can_suggest_books and can_vote on an event"""

    if request.method == "POST":
        if session.get("user_id"):
            event_id = request.json.get("event_id")
            update_type = request.json.get("update_type")

            if update_type == "suggest":
                crud.update_event_suggesting(event_id)

                return jsonify({"success": "Event books has been updated"})

            if update_type == "vote":
                crud.update_voting(event_id)
                event = crud.get_event_by_id(event_id)
            if not event.can_vote:
                events_books = crud.get_all_events_books(event_id)
                vote_totals_dict = {}

                for event_book in events_books:
                    vote_totals_dict[
                        event_book.vote_count] = vote_totals_dict.get(
                            event_book.vote_count, [])
                    vote_totals_dict[event_book.vote_count].append(
                        event_book.isbn)

                max_votes = set(vote_totals_dict[max(vote_totals_dict)])

                for event_book in events_books:
                    if event_book.isbn not in max_votes:
                        crud.remove_book_from_event(event_book.isbn, event_id)
                    else:
                        crud.reset_vote_count(event_book)

                attendees = crud.get_all_events_attendees(event_id)
                for attendee in attendees:
                    crud.reset_voted_for(attendee)

            return jsonify({"success": "Voting has been updated"})

    if request.method == "PUT":
        event_id = request.json.get("event_id")
        isbn = request.json.get("isbn")

        event = crud.get_event_by_id(event_id)
        book = crud.get_book_by_isbn(isbn)

        if book not in crud.get_all_books_for_event(event_id):
            crud.create_event_book(event, book)

            return jsonify({"success": f"You have suggested {book.title}"})

        else:
            return jsonify({
                "error":
                f"That book has already been suggested for the event."
            })
Exemple #3
0
def update_event_book_votes():
    """Increases the number of votes on a given event book"""
    user_id = session.get("user")

    if request.method == "GET":
        # get all of the user's event_books
        events_attendee_dict = crud.get_all_users_voted_for_books(user_id)
        # dictionary with event_id as key and list of book isbn's that the given
        # user has voted for (if any) for each event
        print("THESE ARE EVENTS_ATTENDEE.voted_for", events_attendee_dict)
        return jsonify(events_attendee_dict)

    else:
        event_id = request.json.get("eventId")
        isbn = request.json.get("bookIsbn")

        event_attendee = crud.get_event_attendee_by_id(user_id, event_id)
    
        update = event_attendee.update_voted_for(isbn) # returns, "removed", "added", or None
        events_attendee_dict = crud.get_all_users_voted_for_books(user_id)
       
        events_books = crud.get_all_events_books(event_id)
        events_books = [event_book.to_dict() for event_book in events_books]


        if not update:
            # But buttons to vote should already be gone
            return jsonify({"error": "You have already voted twice.",
                            "booksVotedFor": events_attendee_dict,
                            "allEventsBooks": events_books})
        
        event_book = crud.get_event_book_by_isbn(event_id, isbn)
        book = crud.get_book_by_isbn(isbn)

        if update == "removed":
            crud.update_event_book_vote_count(event_book, "remove")
            return jsonify({"success": f"You have successfully 'unvoted' for {book.title}.",
                            "booksVotedFor": events_attendee_dict,
                            "allEventsBooks": events_books})
           
        crud.update_event_book_vote_count(event_book, "add")
        
        if len(events_attendee_dict[event_id]) >= 2:
            # Vote buttons on the front end should disappear (but unvote buttons should remain)
            return jsonify({"success": f"You voted for {book.title}",
                            "booksVotedFor": events_attendee_dict,
                            "buttons": "hidden",
                            "allEventsBooks": events_books})
        
        return jsonify({"success": f"You voted for {book.title}",
                        "booksVotedFor": events_attendee_dict,
                        "buttons": "visible",
                        "allEventsBooks": events_books})
Exemple #4
0
def add_book_to_event():

    event_id = request.json.get("event_id")
    isbn = request.json.get("isbn")

    event = crud.get_event_by_id(event_id)
    book = crud.get_book_by_isbn(isbn)

    if book not in crud.get_all_books_for_event(event_id): # CHANGED
        crud.create_event_book(event, book) # CHANGED

        return jsonify({"success": f"You have suggested {book.title}"})
    
    else:
        return jsonify({"error": f"That book has already been suggested for the event."})
Exemple #5
0
 def test_get_book_by_isbn(self):
     neverwhere = crud.get_book_by_isbn("yuCUZ3km3qIC")
     self.assertEqual(neverwhere.title, "Neverwhere")
Exemple #6
0
def get_and_update_categories():
    """Gets or updates a user's categories"""

    if session.get("user_id"):
        user_id = session["user_id"]

        if request.method == "GET":
            categories = []

            category_objects = crud.get_all_user_categories(user_id)

            for category_object in category_objects:

                dict_category = category_object.to_dict()
                categories.append(dict_category)

            return jsonify({"categories": categories})

        elif request.method == "POST":
            if request.json.get("label"):
                label = request.json.get("label")

                user = crud.get_user_by_id(user_id)

                if crud.get_category_by_label(user_id, label):
                    return ({
                        "error":
                        f"{label} is already in {user.first_name}'s bookshelf!"
                    })

                new_category = crud.create_category(user_id, label)

                return jsonify({
                    "success":
                    f"{new_category.label} has been added to {user.first_name}'s bookshelf!"
                })
            else:
                old_label = request.json.get("old_label")
                new_label = request.json.get("new_label")

                crud.update_category_label(user_id, old_label, new_label)

                return jsonify({
                    "success": f"{old_label} has been changed to {new_label}!",
                    "label": new_label
                })

        elif request.method == "PUT":
            label = request.json.get("label")
            book_dict = request.json.get("book")
            isbn = book_dict["id"]
            book = crud.get_book_by_isbn(isbn)
            category = crud.get_category_by_label(user_id, label)

            if not book:
                authors = ""
                for author in book_dict["volumeInfo"]["authors"]:
                    authors += f"{author} "
                page_count = book_dict["volumeInfo"].get("pageCount")
                if not page_count:
                    page_count = 000
                book = crud.create_book(
                    isbn, book_dict["volumeInfo"]["title"], authors,
                    book_dict["volumeInfo"]["description"], page_count,
                    book_dict["volumeInfo"]["imageLinks"]["thumbnail"])

            if not category:
                category = crud.create_category(user_id, label)

                added_books = crud.create_book_category(book, category)
                return jsonify({
                    "success":
                    f"""A new category, {category.label}, has been added to your bookshelf and {book.title} has been added to it"""
                })

            if book in crud.get_all_books_in_category(user_id, label):
                return jsonify({
                    "error":
                    f"{book.title} is already in your {category.label} books"
                })

            added_books = crud.create_book_category(book, category)
            return jsonify({
                "success":
                f"{book.title} has been added to {category.label} books"
            })

        elif request.method == "DELETE":
            if request.json.get("label"):
                label = request.json.get("label")
                crud.delete_category(label, user_id)

                return jsonify({
                    "success":
                    f"{label} has successfully been removed from your bookshelf.",
                    "label": ""
                })

            else:
                label = request.json.get("category")
                isbn = request.json.get("isbn")
                title = request.json.get("title")

                this_category = crud.get_category_by_label(user_id, label)

                crud.remove_book_from_category(isbn, this_category.id)

                return jsonify({
                    "success":
                    f"{title} has successfully been removed from {label}.",
                })

    else:
        return jsonify({"error": "User must be logged in to view this page."})
Exemple #7
0
def update_event_book_votes():
    """Increases the number of votes on a given event book"""
    user_id = session.get("user_id")

    events = crud.get_all_events_for_user(user_id)
    all_events = {}
    for event in events:
        events_books = crud.get_all_events_books(event.id)
        event_dict = event.to_dict()
        events_books = [event_book.to_dict() for event_book in events_books]
        event_dict["events_books"] = events_books
        all_events[event.id] = event_dict

    if request.method == "GET":
        # get all of the user's event_books
        events_attendee_dict = crud.get_all_users_voted_for_books(user_id)
        # dictionary with event_id as key and list of book isbn's that the given
        # user has voted for (if any) for each event

        return jsonify({
            "booksVotedFor": events_attendee_dict,
            "allEventsBooks": all_events
        })

    else:
        event_id = request.json.get("eventId")
        isbn = request.json.get("bookIsbn")

        event_attendee = crud.get_event_attendee_by_id(user_id, event_id)

        update = event_attendee.update_voted_for(
            isbn)  # returns, "removed", "added", or None
        events_attendee_dict = crud.get_all_users_voted_for_books(user_id)

        if not update:
            return jsonify({
                "error": "You have already voted twice.",
                "booksVotedFor": events_attendee_dict,
                "allEventsBooks": all_events
            })

        event_book = crud.get_event_book_by_isbn(event_id, isbn)
        book = crud.get_book_by_isbn(isbn)

        if update == "removed":
            crud.update_event_book_vote_count(event_book, "remove")
            return jsonify({
                "success":
                f"You have successfully 'unvoted' for {book.title}.",
                "booksVotedFor": events_attendee_dict,
                "allEventsBooks": all_events
            })

        crud.update_event_book_vote_count(event_book, "add")

        if len(events_attendee_dict[event_id]) >= 2:
            return jsonify({
                "success": f"You voted for {book.title}",
                "booksVotedFor": events_attendee_dict,
                "buttons": "hidden",
                "allEventsBooks": all_events
            })

        return jsonify({
            "success": f"You voted for {book.title}",
            "booksVotedFor": events_attendee_dict,
            "buttons": "visible",
            "allEventsBooks": all_events
        })