From e1d22d502d15e50f40e6d4a9b464ce6f456a0395 Mon Sep 17 00:00:00 2001 From: Fluffy Date: Thu, 22 Jun 2023 20:45:16 +0000 Subject: [PATCH] Show user only once on top scores --- TFR/server/static/sass/button.sass | 1 + TFR/server/static/sass/profile-settings.sass | 18 +++++++++++++--- TFR/server/views.py | 22 ++++++++++++++++---- 3 files changed, 34 insertions(+), 7 deletions(-) diff --git a/TFR/server/static/sass/button.sass b/TFR/server/static/sass/button.sass index d7920ab..3f2e9e5 100644 --- a/TFR/server/static/sass/button.sass +++ b/TFR/server/static/sass/button.sass @@ -51,6 +51,7 @@ min-width: 6rem text-decoration: none + text-align: end white-space: nowrap font-size: 0.9em diff --git a/TFR/server/static/sass/profile-settings.sass b/TFR/server/static/sass/profile-settings.sass index 2d729ed..fcc5c99 100644 --- a/TFR/server/static/sass/profile-settings.sass +++ b/TFR/server/static/sass/profile-settings.sass @@ -5,15 +5,15 @@ .picture margin: 0 - width: 13rem + width: 10rem position: relative display: flex flex-direction: column > img - height: 13rem - width: 13rem + height: 10rem + width: 10rem object-fit: cover @@ -65,3 +65,15 @@ flex-direction: column justify-content: flex-start gap: 0.5rem +@media (max-width: 621px) + .profile-settings + flex-direction: column + gap: 1rem + + .picture + margin: 0 auto + width: 13rem + + > img + height: 13rem + width: 13rem diff --git a/TFR/server/views.py b/TFR/server/views.py index d6b2405..297ecf0 100644 --- a/TFR/server/views.py +++ b/TFR/server/views.py @@ -1,6 +1,9 @@ from flask import Blueprint, request, render_template, abort +from sqlalchemy import func + from .models import Scores, Users from .config import GAME_VERSION, MAX_TOP_SCORES +from .extensions import db blueprint = Blueprint("views", __name__) @@ -12,18 +15,29 @@ def index(): ver_arg = request.args.get("ver", GAME_VERSION) user_arg = request.args.get("user", None) - scores = Scores.query.filter_by(difficulty=diff_arg).order_by(Scores.score.asc()) + scores = db.session.query(Scores).filter_by(difficulty=diff_arg) + + subquery = ( + db.session.query(Scores.user_id, func.min(Scores.score).label('min')) + .group_by(Scores.user_id) + .subquery() + ) if ver_arg: scores = scores.filter_by(version=ver_arg) - if user_arg: + + if not user_arg: + scores = ( + scores.join(subquery, Scores.user_id == subquery.c.user_id) + .filter(Scores.score == subquery.c.min) + ) + else: if user := Users.query.filter_by(username=user_arg).first(): scores = scores.filter_by(user_id=user.id) - print(user.id) else: abort(404, "User not found") - scores = scores.limit(MAX_TOP_SCORES).all() + scores = scores.order_by(Scores.score.asc()).limit(MAX_TOP_SCORES).all() return render_template( "views/scores.html",