コード例 #1
0
def associate_user_to_plan(plan_id):
    schema, errors = assciation_user_plan_schema.load(request.get_json())
    if errors:
        return json.dumps(ValidationError.new_from_marshmallow_error_dict(errors)), HTTPStatus.BAD_REQUEST

    try:
        user_id = schema["user"]
        plan = Plan.query.filter_by(id=plan_id).first()
        if plan is None:
            return json.dumps(ObjectNotFound().new_detailed("plan", "id", plan_id)), HTTPStatus.NOT_FOUND

        user = User.query.filter_by(id=user_id).first()
        if user is None:
            return json.dumps(ObjectNotFound().new_detailed("user", "id", user_id)), HTTPStatus.NOT_FOUND

        if user in plan.users:
            return json.dumps(PlanAlreadyAssociatedError.new("user", "user_id", user_id)), HTTPStatus.BAD_REQUEST

        plan.users.append(user)

        db.session.add(plan)
        db.session.commit()
        plan.notify_association(user)

        return json.dumps(assciation_user_plan_schema.dump(plan).data)

    except Exception as e:
        return json.dumps(ResponseError.new_generic_error()), HTTPStatus.INTERNAL_SERVER_ERROR
コード例 #2
0
def create_exercise():
    schema, errors = exercise_schema.load(request.get_json())

    if errors:
        return json.dumps(ValidationError.new_from_marshmallow_error_dict(errors)), HTTPStatus.BAD_REQUEST

    try:
        exercise = Exercise(name=schema["name"], sets=schema["sets"], reps=schema["reps"])

        plan = Plan.query.filter(Plan.id == schema["plan"], Plan.deleted_at.is_(None)).first()

        if plan is None:
            return json.dumps(ObjectNotFound.new_detailed("plan", "plan", schema["plan"])), HTTPStatus.BAD_REQUEST

        workout_day_list = list(filter(lambda x: x.number == schema["day_number"], plan.days))

        if len(plan.days) > 0 and len(workout_day_list) > 0:
            workout_day = workout_day_list[0]
        else:
            workout_day = Day(number=1, plan=plan)

        exercise.day = workout_day
        exercise.plan = plan

        db.session.add(exercise)
        db.session.commit()

    except Exception as e:
        return json.dumps(ResponseError.new_generic_error()), HTTPStatus.INTERNAL_SERVER_ERROR

    return json.dumps(exercise_schema.dump(exercise).data)
コード例 #3
0
def edit_plan(id):
    schema, errors = plan_schema.load(request.get_json())
    if errors:
        return json.dumps(ValidationError.new_from_marshmallow_error_dict(errors)), HTTPStatus.BAD_REQUEST

    try:
        plan = Plan.query.filter_by(id=id).first()

        if plan is None:
            return json.dumps(ObjectNotFound().new()), HTTPStatus.NOT_FOUND

        if Plan.query.filter_by(name=schema["name"]).count() > 0:
            return json.dumps(
                ObjectAlreadyRegisteredError().new("plan", "name", schema["name"])), HTTPStatus.BAD_REQUEST

        for key, val in schema.items():
            setattr(plan, key, val)

        db.session.add(plan)
        db.session.commit()

        plan.notify_users()

    except Exception as e:
        return json.dumps(ResponseError.new_generic_error()), HTTPStatus.INTERNAL_SERVER_ERROR

    return json.dumps(plan_schema.dump(plan).data)
コード例 #4
0
def add_workout_day(plan_id):
    schema, errors = day_schema.load(request.get_json())
    if errors:
        return json.dumps(ValidationError.new_from_marshmallow_error_dict(errors)), HTTPStatus.BAD_REQUEST

    try:
        plan = Plan.query.filter_by(id=plan_id).first()

        if plan is None:
            return json.dumps(ObjectNotFound().new()), HTTPStatus.NOT_FOUND

        day_number = int(schema["number"])

        if Plan.query.filter(Plan.days.any(number=day_number)).count() > 0:
            return json.dumps(
                ObjectAlreadyRegisteredError().new("day", "number", schema["number"])), HTTPStatus.BAD_REQUEST

        schema["exercises"] = list({val["name"].strip().title(): val for val in schema["exercises"]}.values())

        exercises = [Exercise(**item) for item in schema["exercises"]]

        day = Day(number=schema["number"], plan=plan, exercises=exercises)

        db.session.add(day)
        db.session.commit()

        plan.notify_users()

        return json.dumps(day_schema.dump(day).data)
    except Exception as e:
        return json.dumps(ResponseError.new_generic_error()), HTTPStatus.INTERNAL_SERVER_ERROR
コード例 #5
0
def edit_user(id):
    try:
        schema, errors = user_edit_schema.load(request.get_json())
        if errors:
            return json.dumps(
                ValidationError.new_from_marshmallow_error_dict(
                    errors)), HTTPStatus.BAD_REQUEST

        user = User.query.filter(User.id == id,
                                 User.deleted_at.is_(None)).first()

        if user is None:
            return json.dumps(ObjectNotFound().new()), HTTPStatus.NOT_FOUND

        if g.logged_user.id != id:
            return json.dumps(
                ResponseError.new_generic_error(
                    "You are not authorized to to this operation.")
            ), HTTPStatus.FORBIDDEN

        for key, val in schema.items():
            if key != "password":
                setattr(user, key, val)
            else:
                user.set_password(val)

        db.session.add(user)
        db.session.commit()

    except Exception as e:
        return json.dumps(ResponseError.new_generic_error()
                          ), HTTPStatus.INTERNAL_SERVER_ERROR

    return json.dumps(user_schema.dump(user).data)
コード例 #6
0
def get_exercise(id):
    try:
        exercise = Exercise.query.filter_by(id=id).first()

        if exercise is None:
            return json.dumps(ObjectNotFound().new()), HTTPStatus.NOT_FOUND

        return exercise_schema.dumps(exercise).data

    except Exception as e:
        return json.dumps(ResponseError.new_generic_error()), HTTPStatus.INTERNAL_SERVER_ERROR
コード例 #7
0
def get_plan(plan_id):
    try:

        plan = Plan.query.filter_by(id=plan_id).first()

        if plan is None:
            return json.dumps(ObjectNotFound().new()), HTTPStatus.NOT_FOUND

        return json.dumps(plan_full_schema.dump(plan).data)

    except Exception as e:
        return json.dumps(ResponseError.new_generic_error()), HTTPStatus.INTERNAL_SERVER_ERROR
コード例 #8
0
def delete_workout_day(plan_id, day_number):
    day = Day.query.filter(Day.plan_id == plan_id, Day.number == day_number).first()

    if day is None:
        return json.dumps(ObjectNotFound().new()), HTTPStatus.NOT_FOUND

    for exercise in day.exercises:
        db.session.delete(exercise)

    db.session.delete(day)
    db.session.commit()

    return json.dumps({}), HTTPStatus.OK
コード例 #9
0
def delete_exercise(id):
    try:
        exercise = Exercise.query.filter(Exercise.id == id).first()

        if exercise is None:
            return json.dumps(ObjectNotFound().new()), HTTPStatus.NOT_FOUND

        exercise.deleted_at = datetime.utcnow()

        db.session.delete(exercise)
        db.session.commit()

        return json.dumps({}), HTTPStatus.OK

    except Exception as e:
        return json.dumps(ResponseError.new_generic_error()), HTTPStatus.INTERNAL_SERVER_ERROR
コード例 #10
0
def delete_plan(id):
    try:
        plan = Plan.query.filter(Plan.id == id, Plan.deleted_at.is_(None)).first()

        if plan is None:
            return json.dumps(ObjectNotFound().new()), HTTPStatus.NOT_FOUND

        plan.deleted_at = datetime.utcnow()

        db.session.add(plan)
        db.session.commit()

        return plan_full_schema.dumps(plan).data, HTTPStatus.OK

    except Exception as e:
        return json.dumps(ResponseError.new_generic_error()), HTTPStatus.INTERNAL_SERVER_ERROR
コード例 #11
0
def get_workout_days(plan_id):
    try:

        page = int(request.args.get("page", 1))

        query = Day.query.filter_by(plan_id=plan_id)

        days_paginator = query.paginate(page, int(app.config["ITEMS_PER_PAGE"]))

        if days_paginator is None or query.count() == 0:
            return json.dumps(ObjectNotFound().new()), HTTPStatus.NOT_FOUND

        paginated_data = PaginatorHelper.get_paginator_dict(days_paginator)

        return day_list_schema.dumps(paginated_data).data

    except Exception as e:
        return json.dumps(ResponseError.new_generic_error()), HTTPStatus.INTERNAL_SERVER_ERROR
コード例 #12
0
def edit_exercise(id):
    schema, errors = exercise_edit_schema.load(request.get_json())
    if errors:
        return json.dumps(ValidationError.new_from_marshmallow_error_dict(errors)), HTTPStatus.BAD_REQUEST

    try:
        exercise = Exercise.query.filter_by(id=id).first()

        if exercise is None:
            return json.dumps(ObjectNotFound().new()), HTTPStatus.NOT_FOUND

        for key, val in schema.items():
            setattr(exercise, key, val)

        exercise_schema.updated_at = datetime.utcnow()

        db.session.add(exercise)
        db.session.commit()

        return exercise_schema.dumps(exercise).data

    except Exception as e:
        return json.dumps(ResponseError.new_generic_error()), HTTPStatus.INTERNAL_SERVER_ERROR
コード例 #13
0
def delete_user(id):
    try:
        user_model = User.query.filter(User.id == id,
                                       User.deleted_at.is_(None)).first()

        if user_model is None:
            return json.dumps(ObjectNotFound().new()), HTTPStatus.NOT_FOUND

        if g.logged_user.id != id:
            return json.dumps(
                ResponseError.new_generic_error(
                    "You are not authorized to to this operation.")
            ), HTTPStatus.FORBIDDEN

        user_model.deleted_at = datetime.utcnow()

        db.session.add(user_model)
        db.session.commit()

        return json.dumps(user_schema.dump(user_model).data), HTTPStatus.OK

    except Exception as e:
        return json.dumps(ResponseError.new_generic_error()
                          ), HTTPStatus.INTERNAL_SERVER_ERROR