Skip to content

Commit

Permalink
fix: sorting wall of shame pluss linting (#370)
Browse files Browse the repository at this point in the history
  • Loading branch information
sondrealf authored Oct 23, 2024
1 parent aea57f7 commit 3c647a3
Show file tree
Hide file tree
Showing 6 changed files with 53 additions and 31 deletions.
32 changes: 23 additions & 9 deletions backend/app/api/endpoints/group.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
"""
Group endpoints
"""

import time
from functools import partial

Expand All @@ -10,7 +11,14 @@
from app.api import APIRoute, Request, oidc
from app.config import INDEXED_ROLES
from app.exceptions import DatabaseIntegrityException, NotFound, PunishmentTypeNotExists
from app.models.group import Group, GroupPublic, GroupCreate, GroupCreateMinified, GroupSearchResult, InviteCodePatch
from app.models.group import (
Group,
GroupPublic,
GroupCreate,
GroupCreateMinified,
GroupSearchResult,
InviteCodePatch,
)
from app.models.group_event import GroupEvent, GroupEventCreate
from app.models.group_join_requests import GroupJoinRequest
from app.models.group_member import GroupMemberCreate
Expand Down Expand Up @@ -253,10 +261,11 @@ async def get_public_group(request: Request, group_name_short: str) -> GroupPubl
else:
user_id = None


async with app.db.pool.acquire() as conn:
try:
return await app.db.groups.get_public_group_profile(group_name_short, user_id, conn=conn)
return await app.db.groups.get_public_group_profile(
group_name_short, user_id, conn=conn
)
except NotFound as exc:
raise HTTPException(
status_code=404, detail="Gruppen ble ikke funnet"
Expand Down Expand Up @@ -352,6 +361,7 @@ async def patch_group(

return {"id": data["id"]}


@router.patch(
"/{group_id}/inviteCode",
dependencies=[Depends(oidc)],
Expand Down Expand Up @@ -388,12 +398,12 @@ async def patch_invite_code(

if invite_code == "" or invite_code is not None and invite_code.isspace():
raise HTTPException(
status_code=400,
detail="Invitasjonskoden kan ikke være tom"
status_code=400, detail="Invitasjonskoden kan ikke være tom"
)

await app.db.groups.update_invite_code(group_id, invite_code, conn=conn)


@router.delete(
"/{group_id}",
dependencies=[Depends(oidc)],
Expand Down Expand Up @@ -895,8 +905,7 @@ async def add_punishment(
)
if punishment.punishment_type_id not in group_punishment_types:
raise HTTPException(
status_code=400,
detail="Ugyldig straff, last inn siden på nytt"
status_code=400, detail="Ugyldig straff, last inn siden på nytt"
)

try:
Expand Down Expand Up @@ -1461,7 +1470,9 @@ async def join_group(
requester_user_id, _ = await app.ow_sync.sync_for_access_token(access_token)

async with app.db.pool.acquire() as conn:
group = await app.db.groups.get(group_id, invite_code=invite_code, include_members=False, conn=conn)
group = await app.db.groups.get(
group_id, invite_code=invite_code, include_members=False, conn=conn
)

if not group:
raise HTTPException(
Expand All @@ -1477,7 +1488,9 @@ async def join_group(

await app.db.groups.insert_member(
group_id,
GroupMemberCreate(user_id=requester_user_id, ow_group_user_id=None, active=True),
GroupMemberCreate(
user_id=requester_user_id, ow_group_user_id=None, active=True
),
conn=conn,
)

Expand All @@ -1490,6 +1503,7 @@ async def join_group(
except NotFound:
pass


@router.post(
"/{group_id}/joinRequests/{user_id}/deny",
dependencies=[Depends(oidc)],
Expand Down
11 changes: 8 additions & 3 deletions backend/app/api/endpoints/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
User endpoints
"""

from functools import partial
from app.models.punishment import LeaderboardPunishmentRead
from fastapi import APIRouter, Depends, HTTPException, Query

Expand Down Expand Up @@ -70,6 +71,7 @@ async def get_leadeboard(
request: Request,
page: int = Query(title="Page number", default=0, ge=0),
page_size: int = Query(title="Page size", default=30, ge=1, le=50),
this_year: bool = Query(title="Only show users from this year", default=False),
) -> Page[MinifiedLeaderboardUser]:
access_token = request.raise_if_missing_authorization()

Expand All @@ -87,12 +89,13 @@ async def get_leadeboard(
request=request,
total_coro=app.db.users.get_leaderboard_count,
# results_coro=app.db.users.get_leaderboard,
results_coro=app.db.users.get_minified_leaderboard,
results_coro=partial(app.db.users.get_minified_leaderboard, this_year),
page=page,
page_size=page_size,
)
return await pagination.paginate(conn=conn)



@router.get(
"/leaderboard/punishments/{user_id}",
response_model=list[LeaderboardPunishmentRead],
Expand All @@ -108,4 +111,6 @@ async def get_user_punishments(
_, _ = await app.ow_sync.sync_for_access_token(access_token)

async with app.db.pool.acquire() as conn:
return await app.db.users.get_punishments_for_leaderboard_user(user_id, conn=conn)
return await app.db.users.get_punishments_for_leaderboard_user(
user_id, conn=conn
)
2 changes: 1 addition & 1 deletion backend/app/db/group_events.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import datetime
from typing import TYPE_CHECKING, Optional
from typing import TYPE_CHECKING, Any, Optional

from asyncpg import Pool
from asyncpg.exceptions import ForeignKeyViolationError, UniqueViolationError
Expand Down
11 changes: 8 additions & 3 deletions backend/app/db/users.py
Original file line number Diff line number Diff line change
Expand Up @@ -354,6 +354,7 @@ async def get_groups(

async def get_minified_leaderboard(
self,
this_year: bool,
offset: int,
limit: int,
conn: Optional[Pool] = None,
Expand Down Expand Up @@ -399,10 +400,14 @@ async def get_minified_leaderboard(
LEFT JOIN groups g
ON g.group_id = gm.group_id
WHERE g.ow_group_id IS NOT NULL OR g.special
ORDER BY total_value DESC, u.first_name ASC
OFFSET $1
LIMIT $2
"""

if this_year:
query += "ORDER BY total_value_this_year DESC, u.first_name ASC "
else:
query += "ORDER BY total_value DESC, u.first_name ASC "
query += "OFFSET $1 LIMIT $2"

res = await conn.fetch(
query,
offset,
Expand Down
20 changes: 7 additions & 13 deletions frontend/src/helpers/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,10 @@ const BASE_URL = import.meta.env.VITE_API_URL ?? "http://localhost:8000"

const LEADERBOARD_URL = BASE_URL + "/users/leaderboard"

const getLeaderboardUrl = (page: number) => `${LEADERBOARD_URL}?page=${page}`
const getLeaderboardUrl = (page: number, this_year: boolean) => `${LEADERBOARD_URL}?page=${page}&this_year=${this_year}`

export const getLeaderboardUserPunishmentsUrl = (userId: string) => `${LEADERBOARD_URL}/punishments/${userId}`

const GROUPS_URL = BASE_URL + "/groups/me"

const ME_URL = BASE_URL + "/users/me"

const getGroupUrl = (groupId: string) => BASE_URL + `/groups/${groupId}`
Expand Down Expand Up @@ -661,18 +659,14 @@ export const committeesQuery = () => ({
staletime: 1000 * 60,
})

const getLeaderboard = async ({ pageParam = 0 }) =>
LeaderboardSchema.parse(await axios.get(getLeaderboardUrl(pageParam)).then((res) => res.data))
const getLeaderboard = async ({ pageParam = 0, this_year = true }) =>
LeaderboardSchema.parse(await axios.get(getLeaderboardUrl(pageParam, this_year)).then((res) => res.data))

export const leaderboardQuery = (): UseInfiniteQueryOptions<
Leaderboard,
unknown,
Leaderboard,
Leaderboard,
string[]
> => ({
export const leaderboardQuery = (
this_year: boolean = true
): UseInfiniteQueryOptions<Leaderboard, unknown, Leaderboard, Leaderboard, string[]> => ({
queryKey: ["leaderboard"],
queryFn: getLeaderboard,
queryFn: ({ pageParam = 0 }) => getLeaderboard({ pageParam, this_year }),
getNextPageParam: (lastPage: Leaderboard) => {
const nextPage = lastPage.next ? new URL(lastPage.next).searchParams.get("page") : undefined
return nextPage ? Number(nextPage) : undefined
Expand Down
8 changes: 6 additions & 2 deletions frontend/src/pages/wallOfShame/WallOfShame.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { useInfiniteQuery, useQuery } from "@tanstack/react-query"
import { leaderboardQuery, userQuery } from "../../helpers/api"
import { Button } from "../../components/button/Button"
import { useCurrentUser } from "../../helpers/context/currentUserContext"
import { useState } from "react"
import { useEffect, useState } from "react"

export const WallOfShame = () => {
const { setCurrentUser } = useCurrentUser()
Expand All @@ -18,7 +18,11 @@ export const WallOfShame = () => {
},
})

const { isFetching, data, refetch, fetchNextPage } = useInfiniteQuery(leaderboardQuery())
const { isFetching, data, refetch, fetchNextPage } = useInfiniteQuery(leaderboardQuery(filter === "year"))

useEffect(() => {
refetch()
}, [filter, refetch])

const leaderboardUsers = data?.pages.flatMap((page) => page.results)

Expand Down

0 comments on commit 3c647a3

Please sign in to comment.