Skip to content

Commit

Permalink
fix: [webservice] Fixed the sort of the contributors vs the users.
Browse files Browse the repository at this point in the history
  • Loading branch information
cedricbonhomme committed Jul 21, 2024
1 parent 4438b9b commit 46195d1
Showing 1 changed file with 21 additions and 8 deletions.
29 changes: 21 additions & 8 deletions website/web/views/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
from flask_paginate import get_parameter
from flask_paginate import Pagination
from feedgen.feed import FeedGenerator # type: ignore[import-untyped]
from sqlalchemy import func
from werkzeug import Response as WerkzeugResponse
from werkzeug.security import generate_password_hash

Expand All @@ -41,26 +42,38 @@
@users_bp.route("/", methods=["GET"])
def list_users() -> str:
"""Returns a page with a list of users (directory)."""
# users = User.query.filter(User.is_active == True, User.is_confirmed).order_by(
# User.last_seen.desc()
# )
users = (
users_sorted_by_contributions = (
db.session.query(User.login, func.count(User.id))
.filter(User.is_active == True, User.is_confirmed)
.join(User.comments)
.group_by(User.login)
.all()
)
users_sorted_by_contributions.sort(key=lambda tup: tup[1], reverse=True)
contributors_login = [user[0] for user in users_sorted_by_contributions]
non_contributors = (
User.query.filter(User.is_active == True, User.is_confirmed)
.outerjoin(User.comments)
.group_by(User.id)
.order_by(User.last_seen.desc())
.filter(~User.login.in_(contributors_login))
)

users = []
for user in contributors_login:
users.append(User.query.filter(User.login == user).first())
users.extend(non_contributors.all())

page, per_page, offset = get_page_args(
page_parameter="page", per_page_parameter="per_page"
)
page_name = get_parameter()
per_page_name = get_parameter(default="per_page")
pagination = Pagination(
total=users.count(),
total=len(users),
record_name="users",
css_framework="bootstrap5",
**{page_name: page, per_page_name: per_page},
)
users = users.offset(offset).limit(per_page)
users = users[offset:offset+per_page]
return render_template("user/users.html", users=users, pagination=pagination)


Expand Down

0 comments on commit 46195d1

Please sign in to comment.