Refactor calendar (month and year view), switching to vertical slice arch. Also in progress of refactoring of stats so they are retreived after inital page load for performance sake

This commit is contained in:
Peter Stockings
2024-04-11 13:45:38 +10:00
parent 76789a4934
commit 63d997a3f1
7 changed files with 302 additions and 133 deletions

16
app.py
View File

@@ -7,7 +7,7 @@ import jinja_partials
from jinja2_fragments import render_block
from decorators import validate_person, validate_topset, validate_workout
from db import DataBase
from utils import count_prs_over_time, get_date_info, get_people_and_exercise_rep_maxes, convert_str_to_date, get_earliest_and_latest_workout_date, filter_workout_topsets, first_and_last_visible_days_in_month, get_weekly_pr_graph_model, get_workout_counts
from utils import count_prs_over_time, get_people_and_exercise_rep_maxes, convert_str_to_date, get_earliest_and_latest_workout_date, filter_workout_topsets, first_and_last_visible_days_in_month, get_weekly_pr_graph_model, get_workout_counts
from flask_htmx import HTMX
import minify_html
from urllib.parse import quote
@@ -123,8 +123,6 @@ def get_person(person_id):
@ app.route("/person/<int:person_id>/calendar")
@ validate_person
def get_calendar(person_id):
person = db.get_person(person_id)
selected_date = convert_str_to_date(request.args.get(
'date'), '%Y-%m-%d') or date.today()
selected_view = request.args.get('view') or 'month'
@@ -134,12 +132,11 @@ def get_calendar(person_id):
elif selected_view == 'notes':
return redirect(url_for('get_person_notes', person_id=person_id))
# selected_view = month | year | all
date_info = get_date_info(selected_date, selected_view)
calendar_view = db.calendar.fetch_workouts_for_person(person_id, selected_date, selected_view)
if htmx:
return render_block(app.jinja_env, 'calendar.html', 'content', person=person, selected_date=selected_date, selected_view=selected_view, **date_info, datetime=datetime, timedelta=timedelta, relativedelta=relativedelta, first_and_last_visible_days_in_month=first_and_last_visible_days_in_month), 200, {"HX-Push-Url": url_for('get_calendar', person_id=person_id, view=selected_view, date=selected_date)}
return render_template('calendar.html', person=person, selected_date=selected_date, selected_view=selected_view, **date_info, datetime=datetime, timedelta=timedelta, relativedelta=relativedelta, first_and_last_visible_days_in_month=first_and_last_visible_days_in_month), 200, {"HX-Push-Url": url_for('get_calendar', person_id=person_id, view=selected_view, date=selected_date)}
return render_block(app.jinja_env, 'calendar.html', 'content', **calendar_view), 200, {"HX-Push-Url": url_for('get_calendar', person_id=person_id, view=selected_view, date=selected_date)}
return render_template('calendar.html', **calendar_view), 200, {"HX-Push-Url": url_for('get_calendar', person_id=person_id, view=selected_view, date=selected_date)}
@ app.route("/person/<int:person_id>/notes", methods=['GET'])
@ validate_person
@@ -428,6 +425,11 @@ def get_exercise_progress_for_user(person_id, exercise_id):
return render_template('partials/sparkline.html', **exercise_progress)
@app.route("/stats/person/<int:person_id>", methods=['GET'])
def get_stats_for_person(person_id):
stats = db.stats.fetch_stats_for_person(person_id)
return render_template('partials/stats.html', stats=stats)
@app.teardown_appcontext
def closeConnection(exception):