def register(): values = request.get_json() required = ['username', 'last_name', 'first_name', 'password', 'email', 'profile_pic', 'gender', 'age'] if not all(k in values for k in required): return 'Missing values', 400 email = values.get('email') username = values.get('username') last_name = values.get('last_name') first_name = values.get('first_name') password = values.get('password') gender = values.get('gender') age = values.get('age') profile_pic = values.get("profile_pic") if re.match(r"[^@]+@[^@]+\.[^@]+", email) and len(password) > 4: user = User.get_by_email(email) user_name = User.get_by_username(username) if user_name: return response('failed', 'Failed, username already exists', 202) if not user: token = User(email=email, password=password, first_name=first_name, last_name=last_name, username=username, gender=gender, age=age, profile_pic=profile_pic).save() return response_auth('success', 'Successfully registered', token, 201) else: return response('failed', 'Failed, User already exists, Please sign In', 202) return response('failed', 'Missing or wrong email format or password is less than four characters', 202)
def comment(current_user): values = request.get_json() required = ['comment', 'post_id'] if not all(k in values for k in required): return 'Missing values', 400 comment = Comments(comment=values.get('comment'), post_id=values.get('post_id'), user_id=current_user.id) comment.save() message = values.get('comment') challenge = Challenge.check_postid(values.get('post_id')) if challenge and Challenge.check_join(message, User.getusername(current_user.id)): fields = {'user_id': current_user.id, 'post_id': values.get('post_id'), 'goal': challenge.goal, 'start_date': challenge.start_date, 'challenge_name': challenge.challenge_name, 'challenge_description': challenge.challenge_description, 'current_date': datetime.datetime.now().date(), 'end_date': challenge.end_date } if not Challenge.check_user_joined(current_user.id, values.get('post_id')): Challenge.join_challenge(fields) else: return response('failed', 'already joined', 400) return response('success', 'Commented successfully', 200)
def update_user_settings(current_user): values = request.get_json() required = ['average_weight', 'goal_weight', 'is_diabetic', 'height', 'activity_level'] if not all(k in values for k in required): return 'Missing values', 400 resp = UserSetting.update(current_user.id, values.get('average_weight'), values.get('goal_weight') , values.get('is_diabetic'), values.get('height'), values.get('activity_level') ) if resp: return response('success', 'successfully updated user settings', 200) else: return response('failed', 'Failed update', 400)
def internal_server_error(e): """ Return a custom message for a 500 internal error :param e: Exception :return: """ return response('failed', 'Internal server error', 500)
def route_not_found(e): """ Return a custom 404 Http response message for missing or not found routes. :param e: Exception :return: Http Response """ return response('failed', 'Endpoint not found', 404)
def method_not_found(e): """ Custom response for methods not allowed for the requested URLs :param e: Exception :return: """ return response('failed', 'The method is not allowed for the requested URL', 405)
def community_request(current_user, user_id): """ api to request to join community :param current_user: :param user_id: :return: """ community = Community(community_id=user_id, user_id=current_user.id) community.save() return response('success', 'Successfully joined community', 200)
def login(): values = request.get_json() required = ['password', 'email'] if not all(k in values for k in required): return 'Missing values', 400 email = values.get('email') password = values.get('password') if re.match(r"[^@]+@[^@]+\.[^@]+", email) and len(password) > 4: user = User.query.filter_by(email=email).first() if user and bcrypt.check_password_hash(user.password, password): data = { 'username': user.username, 'fullname': user.first_name + " " + user.last_name, 'profile_pic': user.profile_pic } return response_login(data, 'Successfully logged In', user.encode_auth_token(user.id), 200) return response('failed', 'User does not exist or password is incorrect', 401) return response('failed', 'Missing or wrong email format or password is less than four characters', 401)
def store_steps(current_user, steps): values = request.get_json() required = ['date'] if not all(k in values for k in required): return 'Missing values', 400 localTime = values.get('date') data = localTime.split('-') date = datetime.date(int(data[0]), int(data[1]), int(data[2])) step = Steps(user_id=current_user.id, steps_no=steps, date=date) if not Steps.update_if_instance_exist(date, current_user.id, steps): step.save() return response('success', 'Steps added successfully', 200)
def post(current_user): """ create a post :return: """ values = request.get_json() required = ['description', 'image_url'] if not all(k in values for k in required): return 'Missing values', 400 description = values.get('description') image_url = values.get('image_url') userid = current_user.id post_item = Post(description, image_url, userid) post_id = post_item.save() temp = description.lower() data = {} for word in temp.split(): if word.startswith("#"): if "challenge" in word: data['challenge'] = word[1:] elif word[1:].startswith("d"): data['date'] = word[2:] elif word[1:].startswith("g"): data['goal'] = word[2:] required = ['challenge', 'date', 'goal'] if all(k in data for k in required): end_date = {} date = data["date"].split('-') end_date['year'] = date[0] end_date['month'] = date[1] end_date['day'] = date[2] challenge = Challenge(user_id=current_user.id, goal=data["goal"], challenge_name=data["challenge"], challenge_description=description, end_date=end_date, post_id=post_id) challenge.save() return response('success', 'Successfully posted', 200)
def getuser(): global user_steps values = request.get_json() required = ['user_id'] if not all(k in values for k in required): return 'Missing values', 400 user = User.get_by_id(values.get('user_id')) count = Community.get_community_count(values.get('user_id')) post_count = Post.get_post_count(values.get('user_id')) steps = Steps.get_steps(values.get('user_id'), 1) for item in steps: user_steps = item.steps_no if user: data = { 'user_id': user.id, 'username': user.username, 'community': count, 'posts': post_count, 'steps_today': user_steps } else: return response('failed', 'User Does not exist', 401) return jsonify(data), 200
def search(current_user): isFollowing = False values = request.get_json() required = ['username'] if not all(k in values for k in required): return 'Missing values', 400 user = User.get_by_username(values.get('username')) if user: community = Community.get_community(current_user.id) for person in community: if person.community_id == user.id: isFollowing = True data = { 'user_id': user.id, 'username': user.username, 'community': isFollowing, 'profile_pic': user.profile_pic } else: return response('failed', 'User Does not exist', 401) return jsonify(data), 200
def like(current_user, post_id): like = Likes(user_id=current_user.id, post_id=post_id) like.save() return response('success', 'Successfully liked post', 200)