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.')
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}
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}
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.')
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 }
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(), }
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, }
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(), }