Esempio n. 1
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."
            })
Esempio n. 2
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})
Esempio n. 3
0
def get_user_events():
    """Returns user's events, hosting and attending"""

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

        users_events = crud.get_all_events_for_user(user_id)
        # A list of the user's event objects
        print("USERS EVENTS **************", users_events)
        if users_events:
            users_events_dict = {"hosting": [], "attending": []}

            for event in users_events:
                events_books = crud.get_all_events_books(event.id)
                events_books = [event_book.to_dict() for event_book in events_books]
                books = crud.get_all_books_for_event(event.id) # CHANGED
                books = [book.to_dict() for book in books]

                host = crud.get_user_by_id(event.host_id)

                event = event.to_dict()
                event["books"] = books
                event["events_books"] = events_books
                event["host"] = f"{host.first_name} {host.last_name}"
        
                if event["host_id"] == user_id:
                    users_events_dict["hosting"].append(event)
                else:
                    users_events_dict["attending"].append(event)
            
            if len(users_events_dict["hosting"]) == 0:
                users_events_dict["hosting"] = None
            elif len(users_events_dict["attending"]) == 0:
                users_events_dict["attending"] = None

            return jsonify (users_events_dict)

        else:
            return jsonify ({})

    else:
        return jsonify ({'error': 'User must be logged in to view their events.'})
Esempio n. 4
0
def update_event_books():
    """Updates the status of can_suggest_books and can_vote on an event"""

    if session.get("user"):
        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)
                print("attendees", attendees)
                for attendee in attendees:
                    crud.reset_voted_for(attendee)
                

            return jsonify({"success": "Voting has been updated"})
Esempio n. 5
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
        })
Esempio n. 6
0
def get_create_user_events():
    """Creates, adds, removes, or returns user's events, hosting and attending"""

    if request.method == "POST":
        if session.get("user_id"):
            host_id = session["user_id"]
            city = request.json.get("city")
            state = request.json.get("state")
            eventDate = request.json.get("eventDate")
            startTime = request.json.get("startTime")
            endTime = request.json.get("endTime")

            new_event = crud.create_event(host_id, city, eventDate, startTime,
                                          endTime, state)
            # Add host as an attendee of the event
            crud.create_event_attendee(host_id, new_event.id)

            return jsonify({
                "success":
                f"Your event has successfully been created for {eventDate} at {startTime}"
            })

        else:
            return jsonify(
                {"error": "There was an error creating this event."})

    elif request.method == "GET":
        if session.get("user_id"):
            user_id = session["user_id"]
            users_events = crud.get_all_events_for_user(user_id)
            # A list of the user's event objects

            if users_events:
                users_events_dict = {
                    "hosting": {
                        "past": [],
                        "upcoming": []
                    },
                    "attending": {
                        "past": [],
                        "upcoming": []
                    }
                }

                for event in users_events:
                    events_books = crud.get_all_events_books(event.id)
                    events_books = [
                        event_book.to_dict() for event_book in events_books
                    ]
                    books = crud.get_all_books_for_event(event.id)
                    books = [book.to_dict() for book in books]

                    host = crud.get_user_by_id(event.host_id)

                    event = event.to_dict()
                    event["books"] = books
                    event["events_books"] = events_books
                    event["host"] = f"{host.first_name} {host.last_name}"

                    today = date.today()
                    if event["host_id"] == user_id:
                        if today <= event["event_date"]:
                            users_events_dict["hosting"]["upcoming"].append(
                                event)
                        else:
                            users_events_dict["hosting"]["past"].append(event)

                    else:
                        if today <= event["event_date"]:
                            users_events_dict["attending"]["upcoming"].append(
                                event)
                        else:
                            users_events_dict["attending"]["past"].append(
                                event)

                if len(users_events_dict["hosting"]["upcoming"]) == 0:
                    users_events_dict["hosting"]["upcoming"] = None
                if len(users_events_dict["hosting"]["past"]) == 0:
                    users_events_dict["hosting"]["past"] = None

                elif len(users_events_dict["attending"]["upcoming"]) == 0:
                    users_events_dict["attending"]["upcoming"] = None
                elif len(users_events_dict["attending"]["past"]) == 0:
                    users_events_dict["attending"]["past"] = None

                return jsonify(users_events_dict)

            else:
                return jsonify({
                    "hosting": {
                        "past": None,
                        "upcoming": None
                    },
                    "attending": {
                        "past": None,
                        "upcoming": None
                    }
                })

        else:
            return jsonify(
                {'error': 'User must be logged in to view their events.'})

    user_id = session.get("user_id")
    event_id = request.json.get("event")
    event = crud.get_event_by_id(event_id)
    user = crud.get_user_by_id(user_id)
    attendees = crud.get_all_attendees(event_id)

    if request.method == "DELETE":
        if user not in attendees:
            return jsonify({"error": "You are not attending this event"})

        crud.remove_attendee_from_event(user_id, event_id)

        return jsonify({
            "success":
            f"You are no longer attending the {event.city} book club on {event.event_date}"
        })

    elif request.method == "PUT":

        if user in attendees:
            return jsonify({"error": "You are already attending this event"})

        crud.create_event_attendee(user_id, event_id)

        return jsonify({
            "success":
            f"You are now attending the {event.city} book club on {event.event_date}!"
        })