Пример #1
0
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
Пример #2
0
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
Пример #3
0
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
Пример #4
0
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
Пример #5
0
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
Пример #6
0
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
Пример #7
0
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})
Пример #8
0
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
Пример #9
0
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})
Пример #10
0
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
Пример #11
0
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})
Пример #12
0
def get_future_events():
    """
    Parameters: none

    Response: {'events': [<event>]}
    """
    return jsonify({'events': db.get_all_future_events()})
Пример #13
0
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
Пример #14
0
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
Пример #15
0
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
Пример #16
0
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
Пример #17
0
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
Пример #18
0
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
Пример #19
0
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})
Пример #20
0
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
Пример #21
0
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