Refactor render_users_and_workouts method
This commit is contained in:
77
app.py
77
app.py
@@ -137,7 +137,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(user, user.workouts)
|
||||||
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':
|
||||||
@@ -263,7 +263,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(user, user.workouts)
|
||||||
return render_template('workouts_list.html', workouts=workouts_data)
|
return render_template('workouts_list.html', workouts=workouts_data)
|
||||||
|
|
||||||
|
|
||||||
@@ -283,7 +283,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(user, user.workouts)
|
||||||
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)
|
||||||
@@ -292,7 +292,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(user, user.workouts)
|
||||||
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)
|
||||||
|
|
||||||
|
|
||||||
@@ -304,53 +304,58 @@ def calendar_workout_view(user_id, workout_id):
|
|||||||
return render_template('partials/selected_workout_view.html', workout=workout_view_data, user_id=user_id)
|
return render_template('partials/selected_workout_view.html', workout=workout_view_data, user_id=user_id)
|
||||||
|
|
||||||
|
|
||||||
|
# Utilities
|
||||||
|
|
||||||
|
def generate_user_data(user, workouts=[]):
|
||||||
|
"""
|
||||||
|
Generate data for a single user.
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
- user: The user object.
|
||||||
|
- workouts: List of workouts for the user.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
- dict: A dictionary containing user data and related information.
|
||||||
|
"""
|
||||||
|
|
||||||
|
return {
|
||||||
|
'id': user.id,
|
||||||
|
'name': user.name,
|
||||||
|
'bike_id': user.bike_id,
|
||||||
|
'workouts_count': len(workouts),
|
||||||
|
'workouts': workouts,
|
||||||
|
'daily_duration_sparkline': generate_daily_duration_sparkline(workouts),
|
||||||
|
'calendar_month': generate_calendar_monthly_view(workouts, datetime.now().date())
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
def render_users_and_workouts():
|
def render_users_and_workouts():
|
||||||
|
"""
|
||||||
|
Render users and their associated workouts.
|
||||||
|
"""
|
||||||
users = User.query.all()
|
users = User.query.all()
|
||||||
users_data = []
|
|
||||||
for user in users:
|
|
||||||
workouts = get_workouts_for_user(user)
|
|
||||||
if not workouts:
|
|
||||||
user_data = {
|
|
||||||
'id': user.id,
|
|
||||||
'name': user.name,
|
|
||||||
'bike_id': user.bike_id,
|
|
||||||
'workouts_count': 0,
|
|
||||||
'workouts': [],
|
|
||||||
'daily_duration_sparkline': '',
|
|
||||||
'calendar_month': generate_calendar_monthly_view([], datetime.now().date())
|
|
||||||
}
|
|
||||||
users_data.append(user_data)
|
|
||||||
continue
|
|
||||||
|
|
||||||
user_data = {
|
users_data = [generate_user_data(user, get_workouts_for_user(
|
||||||
'id': user.id,
|
user, user.workouts)) for user in users]
|
||||||
'name': user.name,
|
|
||||||
'bike_id': user.bike_id,
|
|
||||||
'workouts_count': len(workouts),
|
|
||||||
'workouts': workouts,
|
|
||||||
'daily_duration_sparkline': generate_daily_duration_sparkline(workouts),
|
|
||||||
'calendar_month': generate_calendar_monthly_view(workouts, datetime.now().date())
|
|
||||||
}
|
|
||||||
users_data.append(user_data)
|
|
||||||
|
|
||||||
if htmx:
|
template_name = 'users_and_workouts_wrapper.html' if htmx else 'users_and_workouts.html'
|
||||||
return render_template('users_and_workouts_wrapper.html',
|
return render_template(template_name, users=users_data, bikes=Bike.query.all())
|
||||||
users=users_data, bikes=Bike.query.all())
|
|
||||||
return render_template('users_and_workouts.html', users=users_data, bikes=Bike.query.all())
|
|
||||||
|
|
||||||
|
|
||||||
def get_workouts_for_user(user):
|
def get_workouts_for_user(user, workouts):
|
||||||
"""
|
"""
|
||||||
Retrieve view data for all workouts of a user.
|
Retrieve view data for all workouts of a user.
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
- user: The user object with a 'workouts' attribute containing all user workouts.
|
- user: The user object.
|
||||||
|
|
||||||
|
- workouts: A list of all user workouts.
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
- list: A list of view data for valid workouts.
|
- list: A list of view data for valid workouts.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
return [get_workout_view_data(workout, user) for workout in user.workouts if get_workout_view_data(workout, user)]
|
return [get_workout_view_data(workout, user) for workout in workouts if get_workout_view_data(workout, user)]
|
||||||
|
|
||||||
|
|
||||||
def get_workout_view_data(workout, user):
|
def get_workout_view_data(workout, user):
|
||||||
|
|||||||
Reference in New Issue
Block a user