Add options to choose type of bike, and also persist distance, power, calories, speed to db
This commit is contained in:
53
app.py
53
app.py
@@ -28,7 +28,17 @@ class User(db.Model):
|
||||
__tablename__ = 'users'
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
name = db.Column(db.String(255), nullable=False)
|
||||
bike_id = db.Column(db.Integer, db.ForeignKey(
|
||||
'bikes.id', ondelete='CASCADE'), nullable=False)
|
||||
workouts = db.relationship('Workout', backref='user', lazy=True)
|
||||
bike = db.relationship('Bike', backref='user', lazy=True)
|
||||
|
||||
|
||||
class Bike(db.Model):
|
||||
__tablename__ = 'bikes'
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
display_name = db.Column(db.String(255), nullable=False)
|
||||
code_name = db.Column(db.String(255), nullable=False)
|
||||
|
||||
|
||||
class Workout(db.Model):
|
||||
@@ -48,10 +58,13 @@ class CadenceReading(db.Model):
|
||||
'workouts.id', ondelete='CASCADE'), nullable=False)
|
||||
created_at = db.Column(db.DateTime, nullable=False)
|
||||
rpm = db.Column(db.Integer, nullable=False)
|
||||
distance = db.Column(db.Numeric, nullable=False)
|
||||
speed = db.Column(db.Numeric, nullable=False)
|
||||
calories = db.Column(db.Numeric, nullable=False)
|
||||
power = db.Column(db.Integer, nullable=False)
|
||||
|
||||
|
||||
@app.route('/', methods=['GET'])
|
||||
def get_workouts():
|
||||
def render_users_and_workouts():
|
||||
users = User.query.all()
|
||||
users_data = []
|
||||
for user in users:
|
||||
@@ -59,11 +72,17 @@ def get_workouts():
|
||||
user_data = {
|
||||
'id': user.id,
|
||||
'name': user.name,
|
||||
'bike_id': user.bike_id,
|
||||
'workouts_count': len(workouts),
|
||||
'workouts': workouts
|
||||
}
|
||||
users_data.append(user_data)
|
||||
return render_template('users_and_workouts.html', users=users_data)
|
||||
return render_template('users_and_workouts.html', users=users_data, bikes=Bike.query.all())
|
||||
|
||||
|
||||
@app.route('/', methods=['GET'])
|
||||
def get_workouts():
|
||||
return render_users_and_workouts()
|
||||
|
||||
|
||||
@app.route("/user/<int:user_id>/new_workout")
|
||||
@@ -85,14 +104,14 @@ def users():
|
||||
# create a new user
|
||||
data = request.form
|
||||
name = data['name']
|
||||
bike_id = data['bike_id']
|
||||
|
||||
# create a new user and add it to the database
|
||||
new_user = User(name=name)
|
||||
new_user = User(name=name, bike_id=bike_id)
|
||||
db.session.add(new_user)
|
||||
db.session.commit()
|
||||
|
||||
users = User.query.all()
|
||||
return render_template('users.html', users=users)
|
||||
return render_users_and_workouts()
|
||||
|
||||
|
||||
@app.route('/user/<int:user_id>', methods=['DELETE'])
|
||||
@@ -101,8 +120,7 @@ def delete_user(user_id):
|
||||
if user:
|
||||
db.session.delete(user)
|
||||
db.session.commit()
|
||||
users = User.query.all()
|
||||
return render_template('users.html', users=users)
|
||||
return render_users_and_workouts()
|
||||
else:
|
||||
return jsonify({'error': 'User not found.'}), 404
|
||||
|
||||
@@ -115,7 +133,7 @@ def workouts(user_id):
|
||||
|
||||
elif request.method == 'POST':
|
||||
data = request.json
|
||||
rpm_readings = data['workout']
|
||||
data = data['workout']
|
||||
|
||||
# create a new workout
|
||||
workout = Workout(user_id=user_id)
|
||||
@@ -123,9 +141,9 @@ def workouts(user_id):
|
||||
db.session.commit()
|
||||
|
||||
# add cadence readings to the workout
|
||||
for reading in rpm_readings:
|
||||
for d in data:
|
||||
cadence_reading = CadenceReading(
|
||||
workout_id=workout.id, created_at=reading['timestamp'], rpm=reading['rpm'])
|
||||
workout_id=workout.id, created_at=d['timestamp'], rpm=d['rpm'], distance=d['distance'], speed=d['speed'], calories=d['calories'], power=d['power'])
|
||||
db.session.add(cadence_reading)
|
||||
|
||||
db.session.commit()
|
||||
@@ -186,6 +204,19 @@ def workouts_for_user(user_id):
|
||||
return render_template('workouts_list.html', workouts=workouts_data)
|
||||
|
||||
|
||||
@app.route('/user/<int:user_id>/bike', methods=['GET'])
|
||||
def update_users_bike(user_id):
|
||||
bike_id = request.args.get('bike_id')
|
||||
user = User.query.get(user_id)
|
||||
bike = Bike.query.get(bike_id)
|
||||
if user and bike:
|
||||
user.bike_id = bike_id
|
||||
db.session.commit()
|
||||
return render_users_and_workouts()
|
||||
else:
|
||||
return jsonify({'error': 'User or bike not found.'}), 404
|
||||
|
||||
|
||||
def get_workouts_for_user(user_id):
|
||||
workouts_data = []
|
||||
workouts = Workout.query.filter_by(user_id=user_id).order_by(
|
||||
|
||||
Reference in New Issue
Block a user