diff --git a/backend/oasst_backend/api/v1/trollboards.py b/backend/oasst_backend/api/v1/trollboards.py index 4ba5c25662..608e5335db 100644 --- a/backend/oasst_backend/api/v1/trollboards.py +++ b/backend/oasst_backend/api/v1/trollboards.py @@ -14,8 +14,9 @@ def get_trollboard( time_frame: UserStatsTimeFrame, max_count: Optional[int] = Query(100, gt=0, le=10000), + enabled: Optional[bool] = None, api_client: ApiClient = Depends(deps.get_trusted_api_client), db: Session = Depends(deps.get_db), ) -> TrollboardStats: usr = UserStatsRepository(db) - return usr.get_trollboard(time_frame, limit=max_count) + return usr.get_trollboard(time_frame, limit=max_count, enabled=enabled) diff --git a/backend/oasst_backend/user_stats_repository.py b/backend/oasst_backend/user_stats_repository.py index c72366baee..a45dfd44f0 100644 --- a/backend/oasst_backend/user_stats_repository.py +++ b/backend/oasst_backend/user_stats_repository.py @@ -69,6 +69,9 @@ def _create_troll_score(r, highlighted_user_id: UUID | None) -> TrollScore: "auth_method", "display_name", "last_activity_date", + "enabled", + "deleted", + "show_on_leaderboard", ]: d[k] = r[k] if highlighted_user_id: @@ -185,6 +188,7 @@ def get_trollboard( self, time_frame: UserStatsTimeFrame, limit: int = 100, + enabled: Optional[bool] = None, highlighted_user_id: Optional[UUID] = None, ) -> TrollboardStats: """ @@ -198,14 +202,20 @@ def get_trollboard( User.auth_method, User.display_name, User.last_activity_date, + User.enabled, + User.deleted, + User.show_on_leaderboard, TrollStats, ) .join(TrollStats, User.id == TrollStats.user_id) .filter(TrollStats.time_frame == time_frame.value) - .order_by(TrollStats.rank) - .limit(limit) ) + if enabled is not None: + qry = qry.filter(User.enabled == enabled) + + qry = qry.order_by(TrollStats.rank).limit(limit) + trollboard = [_create_troll_score(r, highlighted_user_id) for r in self.session.exec(qry)] if len(trollboard) > 0: last_update = max(x.modified_date for x in trollboard) diff --git a/oasst-shared/oasst_shared/schemas/protocol.py b/oasst-shared/oasst_shared/schemas/protocol.py index 2c18776b01..7ee350f9dc 100644 --- a/oasst-shared/oasst_shared/schemas/protocol.py +++ b/oasst-shared/oasst_shared/schemas/protocol.py @@ -495,6 +495,9 @@ class TrollScore(BaseModel): auth_method: str display_name: str last_activity_date: Optional[datetime] + enabled: bool + deleted: bool + show_on_leaderboard: bool troll_score: int = 0