44 lines
1.6 KiB
Python
44 lines
1.6 KiB
Python
from __future__ import annotations
|
|
|
|
from flask import Blueprint, render_template, request
|
|
from flask_login import login_required
|
|
|
|
from ..services.dates import local_now, month_label
|
|
from ..services.monthly import archive_months_missing_up_to_previous, compute_monthly_scores, get_archived_months, get_snapshot_rows
|
|
|
|
|
|
bp = Blueprint("scoreboard", __name__, url_prefix="/scoreboard")
|
|
|
|
|
|
@bp.route("")
|
|
@login_required
|
|
def index():
|
|
archive_months_missing_up_to_previous()
|
|
now = local_now()
|
|
current_rows = compute_monthly_scores(now.year, now.month)
|
|
archive_options = get_archived_months(limit=18)
|
|
|
|
selected = request.args.get("archive")
|
|
selected_archive = selected
|
|
selected_year = selected_month = None
|
|
archived_rows = []
|
|
if selected:
|
|
year_str, month_str = selected.split("-")
|
|
selected_year, selected_month = int(year_str), int(month_str)
|
|
archived_rows = get_snapshot_rows(selected_year, selected_month)
|
|
elif archive_options:
|
|
selected_year, selected_month = archive_options[0]
|
|
selected_archive = f"{selected_year}-{selected_month:02d}"
|
|
archived_rows = get_snapshot_rows(selected_year, selected_month)
|
|
|
|
return render_template(
|
|
"scoreboard/index.html",
|
|
current_rows=current_rows,
|
|
current_label=month_label(now.year, now.month),
|
|
archive_options=archive_options,
|
|
selected_archive=selected_archive,
|
|
archived_rows=archived_rows,
|
|
archive_label=month_label(selected_year, selected_month) if selected_year and selected_month else None,
|
|
max_points=max([row["total_points"] for row in current_rows], default=1),
|
|
)
|