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." })
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})
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.'})
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"})
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 })
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}!" })