Set bike per workout and more style changes

This commit is contained in:
Peter Stockings
2023-03-30 11:32:37 +11:00
parent 7c655e9a2c
commit 114b501adf
5 changed files with 76 additions and 43 deletions

26
app.py
View File

@@ -48,8 +48,11 @@ class Workout(db.Model):
user_id = db.Column(db.Integer, db.ForeignKey(
'users.id', ondelete='CASCADE'), nullable=False)
created_at = db.Column(db.DateTime, nullable=False, default=db.func.now())
bike_id = db.Column(db.Integer, db.ForeignKey(
'bikes.id', ondelete='CASCADE'), nullable=False)
cadence_readings = db.relationship(
'CadenceReading', backref='workout', lazy=True)
bike = db.relationship('Bike', backref='workouts', lazy=True)
class CadenceReading(db.Model):
@@ -109,11 +112,13 @@ def workouts(user_id):
return render_template('workouts_list.html', workouts=workouts_data)
elif request.method == 'POST':
user = User.query.get(user_id)
data = request.json
data = data['workout']
# create a new workout
workout = Workout(user_id=user_id)
workout = Workout(user_id=user_id, bike_id=user.bike_id)
db.session.add(workout)
db.session.commit()
@@ -199,6 +204,18 @@ def render_users_and_workouts():
users_data = []
for user in users:
workouts = get_workouts_for_user(user.id)
if not workouts:
user_data = {
'id': user.id,
'name': user.name,
'bike_id': user.bike_id,
'workouts_count': 0,
'workouts': [],
'workout_counts_by_week': 0,
'duration_by_week': 0
}
users_data.append(user_data)
continue
workout_counts_by_week = []
duration_by_week = []
# get start date from last workout
@@ -236,6 +253,10 @@ def render_users_and_workouts():
'duration_by_week': duration_by_week
}
users_data.append(user_data)
if htmx:
render_template('users_and_workouts_wrapper.html',
users=users_data, bikes=Bike.query.all())
return render_template('users_and_workouts.html', users=users_data, bikes=Bike.query.all())
@@ -265,7 +286,8 @@ def get_workouts_for_user(user_id):
'duration_minutes': duration.total_seconds() / 60,
'average_rpm': int(average_rpm),
'calories': int(calories),
'distance': int(distance)
'distance': int(distance),
'bike_display_name': workout.bike.display_name
})
return workouts_data