Skip to content

Commit fe9fe0f

Browse files
committed
CHANGES:
- RestAPI: /leaderboard: query added, order added
1 parent 2a47ca1 commit fe9fe0f

File tree

1 file changed

+13
-7
lines changed

1 file changed

+13
-7
lines changed

plugins/restapi/commands.py

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -350,19 +350,24 @@ async def squadrons(self, limit: int = Query(default=None), offset: int = Query(
350350
}))
351351
return squadrons
352352

353-
async def leaderboard(self, what: Literal['kills', 'kdr'], limit: Optional[int] = 10, offset: Optional[int] = 0,
353+
async def leaderboard(self, what: Literal['kills', 'kdr'], order: Literal['ASC', 'DESC'] = 'DESC',
354+
query: Optional[str] = None, limit: Optional[int] = 10, offset: Optional[int] = 0,
354355
server_name: Optional[str] = None):
355356
if what == 'kills':
356357
order_column = 3
357358
else:
358359
order_column = 6
360+
if server_name:
361+
join = "JOIN missions m ON s.mission_id = m.id AND m.server_name = %(server_name)s"
362+
else:
363+
join = ""
364+
if query:
365+
where = "WHERE p.name ILIKE %(query)s"
366+
else:
367+
where = ""
359368

360369
async with self.apool.connection() as conn:
361370
async with conn.cursor(row_factory=dict_row) as cursor:
362-
if server_name:
363-
join = "JOIN missions m ON s.mission_id = m.id AND m.server_name = %(server_name)s"
364-
else:
365-
join = ""
366371
await cursor.execute(f"""
367372
WITH result_with_count AS (
368373
SELECT p.name AS "nick", DATE_TRUNC('second', p.last_seen) AS "date", SUM(s.kills) AS "kills",
@@ -380,13 +385,14 @@ async def leaderboard(self, what: Literal['kills', 'kdr'], limit: Optional[int]
380385
FROM statistics s
381386
JOIN players p ON s.player_ucid = p.ucid
382387
{join}
388+
{where}
383389
GROUP BY 1, 2
384-
ORDER BY {order_column} DESC
390+
ORDER BY {order_column} {order}
385391
LIMIT %(limit)s
386392
OFFSET %(offset)s
387393
)
388394
SELECT * FROM result_with_count
389-
""", {"server_name": server_name, "limit": limit, "offset": offset})
395+
""", {"server_name": server_name, "query": f"%{query}%", "limit": limit, "offset": offset})
390396
rows = await cursor.fetchall()
391397
if not rows:
392398
return {

0 commit comments

Comments
 (0)