diff --git a/db.py b/db.py index b6e9f57..3807943 100644 --- a/db.py +++ b/db.py @@ -51,7 +51,7 @@ class Player(SQLModel, table=True): disabled: bool | None = None hashed_password: str | None = None number: str | None = None - teams: list[Team] | None = Relationship( + teams: list[Team] = Relationship( back_populates="players", link_model=PlayerTeamLink ) scopes: str = "" diff --git a/main.py b/main.py index 7ce4c5a..a3a8dce 100644 --- a/main.py +++ b/main.py @@ -59,14 +59,15 @@ def add_players(players: list[Player]): session.commit() -async def list_players(): +async def list_players(team_id: int): with Session(engine) as session: - statement = select(Player).order_by(Player.display_name) - players = session.exec(statement).fetchall() - return [ - player.model_dump(include={"id", "display_name", "number"}) - for player in players - ] + statement = select(Team).where(Team.id == team_id) + players = [t.players for t in session.exec(statement)][0] + if players: + return [ + player.model_dump(include={"id", "display_name", "number"}) + for player in players + ] async def read_teams_me(user: Annotated[Player, Depends(get_current_active_user)]): diff --git a/src/App.css b/src/App.css index 435b940..e906d71 100644 --- a/src/App.css +++ b/src/App.css @@ -408,6 +408,10 @@ button { } } +.avatars { + margin: 16px auto; +} + .avatar { font-weight: bold; font-size: 110%; @@ -415,8 +419,18 @@ button { width: fit-content; border: 3px solid; border-radius: 1em; - margin: 0 auto 16px auto; + margin: 4px auto; +} +.group-avatar { + background-color: aliceblue; + font-weight: bold; + font-size: 90%; + padding: 3px 1em; + width: fit-content; + border: 3px solid; + border-radius: 1em; + margin: 4px auto; } .user-info { diff --git a/src/Avatar.tsx b/src/Avatar.tsx index 58d9488..a1fb2b9 100644 --- a/src/Avatar.tsx +++ b/src/Avatar.tsx @@ -1,5 +1,5 @@ import { createRef, MouseEventHandler, useEffect, useState } from "react"; -import { useSession } from "./Session"; +import { TeamState, useSession } from "./Session"; import { User } from "./api"; import { useTheme } from "./ThemeProvider"; import { colourTheme, darkTheme, normalTheme, rainbowTheme } from "./themes"; @@ -11,7 +11,7 @@ interface ContextMenuItem { onClick: () => void; } -const UserInfo = (user: User, teams: Team[] | undefined) => { +const UserInfo = (user: User, teams: TeamState | undefined) => { return (