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 show_event(event_id): """Show details on a particular event.""" event = crud.get_event_by_id(event_id) event_start_date = event.event_start_date.strftime('%a %b-%d-%Y %I:%M %p') event_end_date = event.event_end_date.strftime('%a %b-%d-%Y %I:%M %p') return render_template("event_details.html", event=event, event_start_date=event_start_date, event_end_date=event_end_date)
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."})
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 invite_link(event_id): """Return a link to a new event""" event = crud.get_event_by_id(event_id) return render_template("new_event.html", event=event)
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}!" })