def create_group(): """ Request: {"group" : <obj>} Response: {"groupId" : <val>} """ if 'group' not in request.json: return jsonify({'errorMessage': 'Invalid group creation request' }), status.HTTP_400_BAD_REQUEST if 'ownerId' not in request.json['group']: return jsonify({'errorMessage': 'No owner in group request' }), status.HTTP_400_BAD_REQUEST if 'eventId' not in request.json['group']: return jsonify({'errorMessage': 'No event in group request' }), status.HTTP_400_BAD_REQUEST new_group = Group(request.json['group']) if db.get_group_by_owner(new_group.owner_id, new_group.event_id): return jsonify({'errorMessage': 'This group has been created already' }), status.HTTP_400_BAD_REQUEST db.add_group(new_group) group = GroupView( db.get_group_by_owner(new_group.owner_id, new_group.event_id)) event = db.get_event_by_id(request.json['group']['eventId']) db.add_schedule( UserSchedule({ 'time_blocks': [None for _ in range(event.period_count)], 'owner': ObjectId(request.json['group']['ownerId']), 'group_num': ObjectId(group.id) })) return jsonify({'groupId': group.id}), status.HTTP_200_OK
def delete_group(): """ Request: {'groupId': <id>, 'ownerId': <id>} Response: empty """ if 'groupId' not in request.json: return jsonify({'errorMessage': 'Group id is missing from request' }), status.HTTP_400_BAD_REQUEST if 'ownerId' not in request.json: return jsonify({'errorMessage': 'Owner id is missing from request' }), status.HTTP_400_BAD_REQUEST group = db.get_group_by_id(request.json['groupId']) if group: if group.owner_id == ObjectId(request.json['ownerId']): db.remove_group(request.json['groupId']) return "", status.HTTP_200_OK else: return jsonify({ 'errorMessage': 'Given owner is not the owner of the given group' }), status.HTTP_400_BAD_REQUEST else: return jsonify({'errorMessage': 'Given group could not be found' }), status.HTTP_400_BAD_REQUEST
def profile_pic(): """ Params: userId = <value> Request: {'profilePic': <blob>} [POST only] Response: image or empty """ if 'userId' not in request.args: return jsonify({ 'errorMessage': 'Can only search for profile picture by ID' }), status.HTTP_400_BAD_REQUEST user = db.get_user_by_id(request.args['userId']) if user: if request.method == 'GET': if hasattr(user, 'profilePic'): return jsonify({'profilePic': user.profilePic}) else: return '' else: db.update_user_profile_pic(request.args['userId'], request.json['profilePic']) return "", status.HTTP_200_OK else: return jsonify({ 'errorMessage': 'Could not find user with provided ID' }), status.HTTP_400_BAD_REQUEST
def update_rating(): """ Request: {"userId" : <id>, "rating": <val>} Response: empty """ if 'userId' not in request.json: return jsonify({'errorMessage': 'No user given'}), status.HTTP_400_BAD_REQUEST if 'rating' not in request.json: return jsonify({'errorMessage': 'No rating provided'}), status.HTTP_400_BAD_REQUEST user = db.get_user_by_id(request.json['userId']) if not user: return jsonify({'errorMessage': 'No user found with that id' }), status.HTTP_400_BAD_REQUEST if not hasattr(user, 'rating_history') or not user.rating_history: new_history = [request.json['rating']] elif len(user.rating_history) >= 20: new_history = user.rating_history[1:] + [request.json['rating']] else: new_history = user.rating_history + [request.json['rating']] db.update_user_ratings(request.json['userId'], new_history) return '', status.HTTP_200_OK
def leave_group(): """ Params: groupId = <id>, userId = <id> Response: empty """ if 'groupId' not in request.json: return jsonify({'errorMessage': 'Group id missing from request' }), status.HTTP_400_BAD_REQUEST if 'userId' not in request.json: return jsonify({ 'errorMessage': 'Leaving user id missing from request' }), status.HTTP_400_BAD_REQUEST group = db.get_group_by_id(request.json['groupId']) if group: if ObjectId(request.json['userId']) in group.members: db.remove_user_from_group(request.json['userId'], group) db.remove_schedule_of_user_in_group(request.json['userId'], request.json['groupId']) return "", status.HTTP_200_OK else: return jsonify({ 'errorMessage': 'User does not belong to specified group' }), status.HTTP_400_BAD_REQUEST else: return jsonify({'errorMessage': 'Requested group could not be found' }), status.HTTP_400_BAD_REQUEST
def get_open_seats_for_group(): """ Parameters: groupId = <id>, userId = <id> Response: {"openSeats": [[<seat>]]} """ if 'groupId' not in request.args: return jsonify({'errorMessage': 'Group id missing from request'}), status.HTTP_400_BAD_REQUEST if 'userId' not in request.args: return jsonify({'errorMessage': 'User id missing from request'}), status.HTTP_400_BAD_REQUEST group = db.get_group_by_id(request.args['groupId']) if group: schedules = db.get_schedules_for_group(group._id) #TODO I'm hardcoding 4 quarters #initialize all seats to be open in all quarters open_seats = [[seat for seat in group.seats] for _ in range(4)] for schedule in schedules: for avail_quarter, scheduled in zip(open_seats, schedule.time_blocks): if scheduled in avail_quarter: avail_quarter.remove(scheduled) user_sched = db.get_schedule_of_user_in_group(request.args['userId'], request.args['groupId']) open_seats = [['', selected] + ls for ls, selected in zip(open_seats, user_sched.time_blocks)] return jsonify({'openSeats': open_seats}), status.HTTP_200_OK else: return jsonify({'errorMessage': "Requested group could not be found"}), status.HTTP_400_BAD_REQUEST
def get_many_users(): """ Params: id = <val> & id = <val> & ... Response: {"usernames" : [<str>], "userIds" : [<str>]} """ if 'id' not in request.args: return jsonify({'usernames': []}) ids = request.args.getlist('id') users = [db.get_user_by_id(x) for x in ids] usernames = [UserView(user).name for user in users if user is not None] user_ids = [UserView(user).id for user in users if user is not None] return jsonify({'usernames': usernames, 'userIds': user_ids})
def get_schedules_for_group(): """ Parameters: groupId = <id> Response: {"schedules": [[<seat>]]} """ if 'groupId' not in request.args: return jsonify({'errorMessage': 'Group id missing from request'}), status.HTTP_400_BAD_REQUEST group = db.get_group_by_id(request.args['groupId']) if group: schedules = [ViewModel.UserScheduleView(x) for x in db.get_schedules_for_group(group._id)] return jsonify({'schedules': schedules}) else: return jsonify({'errorMessage': "Requested group could not be found"}), status.HTTP_400_BAD_REQUEST
def process_login(): """ Params: email = <value> Response: {"newUser" : <bool>, "userId": <obj>} """ if 'email' not in request.args: return jsonify({'errorMessage': 'Can only search for users by email' }), status.HTTP_400_BAD_REQUEST user = db.get_user_by_email(request.args['email']) if user: return jsonify({'newUser': False, 'userId': UserView(user).id}) else: return jsonify({'newUser': True, 'userId': None})
def add_group_rating(): """ Params: {"groupId" = <id>, "userId" = <id>} Response: "" """ if 'groupId' not in request.json: return jsonify({'errorMessage': 'Group id missing from request' }), status.HTTP_400_BAD_REQUEST if 'userId' not in request.json: return jsonify({'errorMessage': 'User id missing from request' }), status.HTTP_400_BAD_REQUEST db.add_rated_for_group(request.json['userId'], request.json['groupId']) return "", status.HTTP_200_OK
def get_group(): """ Parameters: id = <id> Response: {"group" : <obj>} """ if 'id' not in request.args: return jsonify({'errorMessage': 'Group id missing from request' }), status.HTTP_400_BAD_REQUEST group = db.get_group_by_id(request.args['id']) if group: return jsonify({'group': GroupView(group)}) else: return jsonify({'group': None})
def get_future_events(): """ Parameters: none Response: {'events': [<event>]} """ return jsonify({'events': db.get_all_future_events()})
def get_user_groups(): """ Params: "userId" = <id> Response: {"groups" : [<obj>]} """ if 'userId' not in request.args: return jsonify({'errorMessage': 'User id missing from request' }), status.HTTP_400_BAD_REQUEST return jsonify({ 'groups': [ GroupView(g) for g in db.get_groups_with_user(request.args['userId']) ] }), status.HTTP_200_OK
def get_profile(): """ Params: userId = <value> Response: {"user" : <obj>} """ if 'userId' not in request.args: return jsonify({'errorMessage': 'Can only search for users by ID' }), status.HTTP_400_BAD_REQUEST user = db.get_user_by_id(request.args['userId']) if user: return jsonify({'user': UserView(user)}) else: return jsonify({ 'errorMessage': 'Could not find user with provided ID' }), status.HTTP_400_BAD_REQUEST
def get_event(): """ Parameters: eventId Response: {'event': <event>} """ if 'eventId' not in request.args: return jsonify({'errorMessage': 'Event ID missing from request' }), status.HTTP_400_BAD_REQUEST event = db.get_event_by_id(request.args['eventId']) if event: return jsonify({'event': EventView(event)}) else: return jsonify({ 'errorMessage': 'Could not find event with provided ID' }), status.HTTP_400_BAD_REQUEST
def update_schedule(): """ Request: {"groupId: <id>, "userId": <id>, seats: [<seat>]} Response: empty """ if 'groupId' not in request.json: return jsonify({'errorMessage': 'Group id missing from request'}), status.HTTP_400_BAD_REQUEST if 'userId' not in request.json: return jsonify({'errorMessage': 'User id missing from request'}), status.HTTP_400_BAD_REQUEST if 'seats' not in request.json: return jsonify({'errorMessage': 'Schedule data missing from request'}), status.HTTP_400_BAD_REQUEST if db.get_schedule_of_user_in_group(request.json['userId'], request.json['groupId']): db.update_schedule_of_user_in_group(request.json['userId'], request.json['groupId'], request.json['seats']) return '', status.HTTP_200_OK else: return jsonify({'errorMessage': 'No schedule found for given user in given group'}), status.HTTP_400_BAD_REQUEST
def update_user(): """ Request: {"user" : <obj>} Response: empty """ if 'user' not in request.json: return jsonify({'errorMessage': 'No user given'}), status.HTTP_400_BAD_REQUEST if 'id' not in request.json['user']: return jsonify({'errorMessage': 'User must have an id'}), status.HTTP_400_BAD_REQUEST if db.get_user_by_id(request.json['user']['id']): db.update_user(User(request.json['user'])) return "", status.HTTP_200_OK else: return jsonify({'errorMessage': 'No user with provided ID was found' }), status.HTTP_400_BAD_REQUEST
def clear_approvals(): """ Params: "groupId" = <id> Response: "" """ if 'groupId' not in request.json: return jsonify({'errorMessage': 'Group id missing from request' }), status.HTTP_400_BAD_REQUEST db.remove_approvals_for_group(request.json['groupId']) return "", status.HTTP_200_OK
def add_user(): """ Request: {"user" : <obj>} Response: {userId: <str>} """ if 'user' not in request.json: return jsonify({'errorMessage': 'No user given'}), status.HTTP_400_BAD_REQUEST if 'email' not in request.json['user']: return jsonify({'errorMessage': 'User must have an email' }), status.HTTP_400_BAD_REQUEST new_user = User(request.json['user']) if db.get_user_by_email(new_user.email): return jsonify({'errorMessage': 'This user already exists' }), status.HTTP_400_BAD_REQUEST db.add_user(new_user) new_user = db.get_user_by_email(new_user.email) return jsonify({'userId': new_user._id})
def join_group(): """ Request: {"groupId" : <id>, "userId" : <id>} Response: empty """ if 'groupId' not in request.json: return jsonify({'errorMessage': 'Group id missing from request' }), status.HTTP_400_BAD_REQUEST if 'userId' not in request.json: return jsonify({ 'errorMessage': 'Joining user id missing from request' }), status.HTTP_400_BAD_REQUEST group = db.get_group_by_id(request.json['groupId']) if group: if ObjectId(request.json['userId']) not in group.members: db.add_user_to_group(request.json['userId'], group) event = db.get_event_by_id(group.event_id) db.add_schedule( UserSchedule({ 'time_blocks': [None for _ in range(event.period_count)], 'owner': ObjectId(request.json['userId']), 'group_num': ObjectId(request.json['groupId']) })) return "", status.HTTP_200_OK else: return jsonify({ 'errorMessage': 'User is already a member of this group' }), status.HTTP_400_BAD_REQUEST else: return jsonify({'errorMessage': 'Requested group could not be found' }), status.HTTP_400_BAD_REQUEST
def get_all_groups(): """ Request: empty Response: {"groups" : [<obj>]} """ groups = [] for g in db.get_all_groups(): groupModel = GroupView(g) event = None if hasattr(groupModel, 'eventId'): event = db.get_event_by_id(groupModel.eventId) groupModel.eventName = event.event_name if event else 'UNKNOWN EVENT' owner = db.get_user_by_id(groupModel.ownerId) groupModel.ownerName = owner.name groups.append(groupModel) return jsonify({'groups': groups}), status.HTTP_200_OK