Example #1
0
def update_profile(id):
    request_data = request.get_json()

    if not request_data:
        return bad_request("No input data provided")

    try:
        data = ProfileSchema().load(request_data)
    except ValidationError as error:
        return error_response(422, error.messages)

    try:
        user = User.find_by_id(id)
        profile = Profile.find_by_id(user.profile.id)

        profile.firstname = data.get('firstname').title()
        profile.lastname = data.get('lastname').title()
        profile.bio = data.get('bio')

        prof = Profile.find_by_username(data.get('username'))

        if prof is not None:
            if prof.user_id != id:
                return bad_request('Username is already taken.')

        profile.username = data.get('username')
        profile.save()

        response = jsonify({'message': 'Successfully updated your profile'})
        response.status_code = 200

        return response

    except Exception:
        return error_response(500, 'Something went wrong, please try again.')
Example #2
0
def check_username():
    data = request.get_json()
    user = Profile.find_by_username(data.get('username'))

    if user is not None:
        if user.id != id:
            return {'res': False}

    return {'res': True}
Example #3
0
def check_username(id):
    data = request.get_json()
    profile = Profile.find_by_username(data.get('username'))

    if profile is not None:
        if profile.user_id != id:
            return {'res': False}

    return {'res': True}
Example #4
0
def get_profile(user, username):
    a_user = Profile.find_by_username(username).user

    if a_user:
        profile = UserSchema(only=(
            'id',
            'profile',
            'followers',
            'following',
        )).dump(a_user)
        if user.profile.username != username:
            profile['isFollowing'] = user.is_following(a_user)
        return jsonify(profile)

    return not_found('User not found.')
Example #5
0
def get_chat_messages(user):
    username = request.args.get('username', '')
    cursor = request.args.get('cursor')
    items_per_page = current_app.config['ITEMS_PER_PAGE']
    a_user = Profile.find_by_username(username).user
    nextCursor = None
    msgs = None

    if not a_user:
        return not_found('User not found.')

    try:
        query = user.get_chat_messages(a_user)
        chat = user.get_chat(a_user)

        if cursor == '0':
            msgs = query.limit(items_per_page + 1).all()
        else:
            cursor = urlsafe_base64(cursor, from_base64=True)
            msgs = query.filter(
                Message.created_on < cursor).limit(items_per_page + 1).all()

        if len(msgs) > items_per_page:
            nextCursor = urlsafe_base64(msgs[items_per_page -
                                             1].created_on.isoformat())

        # check if lrm exist
        if chat:
            lrm = LastReadMessage.find_by_pk(user.id, chat.id)

            if lrm:
                lrm.timestamp = datetime.utcnow()
            else:
                lrm = LastReadMessage()
                lrm.user_id = user.id
                lrm.chat_id = chat.id
                lrm.timestamp = datetime.utcnow()
            lrm.save()
    except Exception as e:
        db.session.rollback()
        print(e)
        return server_error('Something went wrong, please try again.')
    else:
        return {
            'data': MessageSchema(many=True).dump(msgs[:items_per_page]),
            'nextCursor': nextCursor
        }
Example #6
0
def get_liked_posts(user, username):
    """Get a users list of liked posts"""
    a_user = Profile.find_by_username(username).user

    if not a_user:
        return not_found('User not found.')

    cursor = request.args.get('cursor')
    items_per_page = current_app.config['ITEMS_PER_PAGE']
    nextCursor = None
    posts = None

    try:
        query = a_user.likes.order_by(Post.created_on.desc())
        if cursor == '0':
            posts = query.limit(items_per_page + 1).all()
        else:
            cursor = urlsafe_base64(cursor, from_base64=True)
            posts = query.filter(
                Post.created_on < cursor).limit(items_per_page + 1).all()
    except (exc.IntegrityError, ValueError) as e:
        db.session.rollback()
        print(e)
        return server_error('Something went wrong, please try again.')

    if len(posts) > items_per_page:
        nextCursor = urlsafe_base64(
            posts[items_per_page - 1].created_on.isoformat())

    liked_posts = []
    for p in posts[:items_per_page]:
        post = p.to_dict(user)

        if p.parent:
            post['parent'] = PostSchema(
                only=('id', 'body', 'author',)).dump(p.parent)
        liked_posts.append(post)

    return {
        'data': liked_posts,
        'nextCursor': nextCursor,
        'total': query.count(),
    }
Example #7
0
def get_followers(user, username):
    """Get list of users following a user"""
    a_user = Profile.find_by_username(username).user

    if not a_user:
        return not_found('User not found.')

    cursor = request.args.get('cursor')
    items_per_page = current_app.config['ITEMS_PER_PAGE']
    nextCursor = None
    followers = None

    try:
        query = a_user.followers.order_by(User.id.desc())

        if cursor == '0':
            followers = query.limit(items_per_page + 1).all()
        else:
            cursor = int(urlsafe_base64(cursor, from_base64=True))
            followers = query.filter(
                User.id < cursor).limit(items_per_page + 1).all()

    except (exc.IntegrityError, ValueError):
        db.session.rollback()
        return server_error('Something went wrong, please try again.')
    else:
        if len(followers) > items_per_page:
            nextCursor = urlsafe_base64(str(followers[items_per_page - 1].id))

        user_followers = []
        for a_user in followers[:items_per_page]:
            follower = UserSchema(only=('id', 'profile',)).dump(a_user)
            follower['isFollowing'] = user.is_following(a_user)
            user_followers.append(follower)

        return {
            'data': user_followers,
            'total': query.count(),
            'nextCursor': nextCursor,
        }
Example #8
0
def get_user_posts(user, username):
    """Get a users list of posts"""
    a_user = Profile.find_by_username(username).user

    if not a_user:
        return not_found('User not found.')

    cursor = request.args.get('cursor')
    items_per_page = current_app.config['ITEMS_PER_PAGE']
    nextCursor = None
    posts = None

    try:
        query = Post.query.with_parent(a_user).filter(
            Post.comment_id.is_(None)).order_by(Post.created_on.desc())

        if cursor == '0':
            posts = query.limit(items_per_page + 1).all()
        else:
            cursor = urlsafe_base64(cursor, from_base64=True)
            posts = query.filter(
                Post.created_on < cursor).limit(items_per_page + 1).all()
    except (exc.IntegrityError, ValueError) as e:
        db.session.rollback()
        print(e)
        return server_error('Something went wrong, please try again.')

    if len(posts) > items_per_page:
        nextCursor = urlsafe_base64(
            posts[items_per_page - 1].created_on.isoformat())

    return {
        'data': [post.to_dict(user) for post in posts[:items_per_page]],
        'nextCursor': nextCursor,
        'total': query.count(),
    }