When a new workout is created, calculate and persist distance, calories, average, min, max rpm|bpm etc (Need to test this)
This commit is contained in:
50
app.py
50
app.py
@@ -141,8 +141,8 @@ def workouts(user_id):
|
||||
app.logger.info(f'Creating workout for user {user.name} ({user.id})')
|
||||
|
||||
data = request.json
|
||||
workout_data = data['workout'] or []
|
||||
heart_rate = data['heart_rate'] or []
|
||||
cadence_readings = data['cadence_readings'] or []
|
||||
heart_rate_readings = data['heart_rate_readings'] or []
|
||||
|
||||
# create a new workout
|
||||
workout = Workout(user_id=user_id, bike_id=user.bike_id)
|
||||
@@ -150,19 +150,57 @@ def workouts(user_id):
|
||||
db.session.commit()
|
||||
|
||||
app.logger.info(
|
||||
f'Workout({workout.id}) created for user {user.name} ({user.id}) with {len(workout_data)} cadence readings and {len(heart_rate)} heart rate readings')
|
||||
f'Workout({workout.id}) created for user {user.name} ({user.id}) with {len(cadence_readings)} cadence readings and {len(heart_rate_readings)} heart rate readings')
|
||||
|
||||
# add cadence readings to the workout
|
||||
for w in workout_data:
|
||||
for c in cadence_readings:
|
||||
cadence_reading = CadenceReading(
|
||||
workout_id=workout.id, created_at=w['timestamp'], rpm=w['rpm'], distance=w['distance'], speed=w['speed'], calories=w['calories'], power=w['power'])
|
||||
workout_id=workout.id, created_at=c['timestamp'], rpm=c['rpm'], distance=c['distance'], speed=c['speed'], calories=c['calories'], power=c['power'])
|
||||
db.session.add(cadence_reading)
|
||||
|
||||
for h in heart_rate:
|
||||
for h in heart_rate_readings:
|
||||
heart_rate_reading = HeartRateReading(
|
||||
workout_id=workout.id, created_at=h['timestamp'], bpm=h['bpm'])
|
||||
db.session.add(heart_rate_reading)
|
||||
|
||||
if cadence_readings:
|
||||
start_time = min(
|
||||
reading.created_at for reading in cadence_readings)
|
||||
end_time = max(
|
||||
reading.created_at for reading in cadence_readings)
|
||||
duration = end_time - start_time
|
||||
duration = duration.total_seconds()
|
||||
average_rpm = sum(
|
||||
reading.rpm for reading in cadence_readings) / len(cadence_readings)
|
||||
min_rpm = min(
|
||||
reading.rpm for reading in cadence_readings)
|
||||
max_rpm = max(
|
||||
reading.rpm for reading in cadence_readings)
|
||||
calories = cadence_readings[-1].calories
|
||||
distance = cadence_readings[-1].distance
|
||||
|
||||
workout.is_cadence_available = True
|
||||
workout.started_at = start_time
|
||||
workout.duration = duration
|
||||
workout.average_rpm = average_rpm
|
||||
workout.min_rpm = min_rpm
|
||||
workout.max_rpm = max_rpm
|
||||
workout.calories = calories
|
||||
workout.distance = distance
|
||||
|
||||
if heart_rate_readings:
|
||||
average_bpm = sum(heartrate.bpm for heartrate in heart_rate_readings) / \
|
||||
len(heart_rate_readings)
|
||||
min_bpm = min(
|
||||
heartrate.bpm for heartrate in heart_rate_readings)
|
||||
max_bpm = max(
|
||||
heartrate.bpm for heartrate in heart_rate_readings)
|
||||
|
||||
workout.is_heart_rate_available = True
|
||||
workout.average_bpm = average_bpm
|
||||
workout.min_bpm = min_bpm
|
||||
workout.max_bpm = max_bpm
|
||||
|
||||
db.session.commit()
|
||||
|
||||
return jsonify({'message': 'Workout created successfully.'}), 201
|
||||
|
||||
Reference in New Issue
Block a user