Fix bug introduced in last few commits where list of workouts wouldnt be shown in order
This commit is contained in:
26
app.py
26
app.py
@@ -1,3 +1,4 @@
|
|||||||
|
from sqlalchemy import desc
|
||||||
from flask_basicauth import BasicAuth
|
from flask_basicauth import BasicAuth
|
||||||
import matplotlib.dates as mdates
|
import matplotlib.dates as mdates
|
||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
@@ -42,7 +43,8 @@ class User(db.Model):
|
|||||||
name = db.Column(db.String(255), nullable=False)
|
name = db.Column(db.String(255), nullable=False)
|
||||||
bike_id = db.Column(db.Integer, db.ForeignKey(
|
bike_id = db.Column(db.Integer, db.ForeignKey(
|
||||||
'bikes.id', ondelete='CASCADE'), nullable=False)
|
'bikes.id', ondelete='CASCADE'), nullable=False)
|
||||||
workouts = db.relationship('Workout', backref='user', lazy=True)
|
workouts = db.relationship(
|
||||||
|
'Workout', backref='user', lazy=True, order_by='desc(Workout.created_at)') # 'Workout.created_at'
|
||||||
bike = db.relationship('Bike', backref='user', lazy=True)
|
bike = db.relationship('Bike', backref='user', lazy=True)
|
||||||
|
|
||||||
|
|
||||||
@@ -145,7 +147,7 @@ def delete_user(user_id):
|
|||||||
def workouts(user_id):
|
def workouts(user_id):
|
||||||
user = User.query.get(user_id)
|
user = User.query.get(user_id)
|
||||||
if request.method == 'GET':
|
if request.method == 'GET':
|
||||||
workouts_data = get_workouts_for_user(user)
|
workouts_data = get_workouts_for_user_view_data(user)
|
||||||
return render_template('workouts_list.html', workouts=workouts_data)
|
return render_template('workouts_list.html', workouts=workouts_data)
|
||||||
|
|
||||||
elif request.method == 'POST':
|
elif request.method == 'POST':
|
||||||
@@ -272,7 +274,7 @@ def delete_workout(user_id, workout_id):
|
|||||||
@app.route('/user/<int:user_id>/workouts', methods=['GET'])
|
@app.route('/user/<int:user_id>/workouts', methods=['GET'])
|
||||||
def workouts_for_user(user_id):
|
def workouts_for_user(user_id):
|
||||||
user = User.query.get(user_id)
|
user = User.query.get(user_id)
|
||||||
workouts_data = get_workouts_for_user(user)
|
workouts_data = get_workouts_for_user_view_data(user)
|
||||||
return render_template('workouts_list.html', workouts=workouts_data)
|
return render_template('workouts_list.html', workouts=workouts_data)
|
||||||
|
|
||||||
|
|
||||||
@@ -292,7 +294,7 @@ def update_users_bike(user_id):
|
|||||||
@ app.route('/user/<int:user_id>/calendar', methods=['GET'])
|
@ app.route('/user/<int:user_id>/calendar', methods=['GET'])
|
||||||
def calendar_view(user_id):
|
def calendar_view(user_id):
|
||||||
user = User.query.get(user_id)
|
user = User.query.get(user_id)
|
||||||
workouts = get_workouts_for_user(user)
|
workouts = get_workouts_for_user_view_data(user)
|
||||||
date = request.args.get('date', default=datetime.now().date(), type=toDate)
|
date = request.args.get('date', default=datetime.now().date(), type=toDate)
|
||||||
calendar_month = generate_calendar_monthly_view(workouts, date)
|
calendar_month = generate_calendar_monthly_view(workouts, date)
|
||||||
return render_template('partials/calendar.html', calendar_month=calendar_month, user_id=user_id)
|
return render_template('partials/calendar.html', calendar_month=calendar_month, user_id=user_id)
|
||||||
@@ -301,7 +303,7 @@ def calendar_view(user_id):
|
|||||||
@ app.route("/user/<int:user_id>/workout/list", methods=['GET'])
|
@ app.route("/user/<int:user_id>/workout/list", methods=['GET'])
|
||||||
def workout_list(user_id):
|
def workout_list(user_id):
|
||||||
user = User.query.get(user_id)
|
user = User.query.get(user_id)
|
||||||
workouts = get_workouts_for_user(user)
|
workouts = get_workouts_for_user_view_data(user)
|
||||||
return render_template('partials/workouts_list_fragment.html', workouts=workouts, user_id=user_id, workouts_all_loaded=True)
|
return render_template('partials/workouts_list_fragment.html', workouts=workouts, user_id=user_id, workouts_all_loaded=True)
|
||||||
|
|
||||||
|
|
||||||
@@ -344,14 +346,14 @@ def render_users_and_workouts():
|
|||||||
"""
|
"""
|
||||||
users = User.query.all()
|
users = User.query.all()
|
||||||
|
|
||||||
users_data = [generate_user_data(user, get_workouts_for_user(
|
users_data = [generate_user_data(user, get_workouts_for_user_view_data(
|
||||||
user)) for user in users]
|
user)) for user in users]
|
||||||
|
|
||||||
template_name = 'users_and_workouts_wrapper.html' if htmx else 'users_and_workouts.html'
|
template_name = 'users_and_workouts_wrapper.html' if htmx else 'users_and_workouts.html'
|
||||||
return render_template(template_name, users=users_data, bikes=Bike.query.all())
|
return render_template(template_name, users=users_data, bikes=Bike.query.all())
|
||||||
|
|
||||||
|
|
||||||
def get_workouts_for_user(user):
|
def get_workouts_for_user_view_data(user):
|
||||||
"""
|
"""
|
||||||
Retrieve view data for all workouts of a user.
|
Retrieve view data for all workouts of a user.
|
||||||
|
|
||||||
@@ -445,16 +447,6 @@ def format_date_with_ordinal(d, format_string):
|
|||||||
return d.strftime(format_string).replace('{th}', ordinal)
|
return d.strftime(format_string).replace('{th}', ordinal)
|
||||||
|
|
||||||
|
|
||||||
def format_duration(duration):
|
|
||||||
hours, remainder = divmod(duration.seconds, 3600)
|
|
||||||
minutes, _ = divmod(remainder, 60)
|
|
||||||
|
|
||||||
if duration >= timedelta(hours=1):
|
|
||||||
return f"{hours}h {minutes}m"
|
|
||||||
else:
|
|
||||||
return f"{minutes}m"
|
|
||||||
|
|
||||||
|
|
||||||
def date_range(start_date, end_date):
|
def date_range(start_date, end_date):
|
||||||
"""
|
"""
|
||||||
Generator for dates between two dates (inclusive).
|
Generator for dates between two dates (inclusive).
|
||||||
|
|||||||
Reference in New Issue
Block a user