Can now retrieve players from endpoint

This commit is contained in:
Yarne Coppens 2024-08-24 18:13:32 +02:00
parent 7719f879ba
commit 7bb210ba83
5 changed files with 59 additions and 13 deletions

View file

@ -19,11 +19,15 @@ class PlayPlayer(PlayPlayerBase, table=True):
player: "Player" = Relationship(back_populates="playplayers") player: "Player" = Relationship(back_populates="playplayers")
class PlayPlayerPublic(PlayPlayerBase): class PlayPlayerPublic(PlayPlayerBase):
id: int
name: str name: str
player: "PlayerPublicNoPlayPlayers" player: "PlayerPublicNoPlayPlayers"
play: "PlayPublic"
class PlayPlayerPublicWithPlay(PlayPlayerPublic): class PlayPlayerPublicNoPlay(PlayPlayerBase):
name: str
player: "PlayerPublicNoPlayPlayers"
class PlayPlayerPublicNoPlayer(PlayPlayerBase):
name: str name: str
play: "PlayPublic" play: "PlayPublic"
@ -47,12 +51,12 @@ class Play(PlayBase, table=True):
} }
class PlayPublic(PlayBase): class PlayPublic(PlayBase):
players: list[PlayPlayerPublic] players: list[PlayPlayerPublicNoPlay]
boardgame: "BoardGamePublicNoPlays" boardgame: "BoardGamePublicNoPlays"
class PlayPublicNoGame(PlayBase): class PlayPublicNoGame(PlayBase):
players: list[PlayPlayerPublic] = [] players: list[PlayPlayerPublicNoPlay] = []
from src.classes.boardgame_classes import BoardGame, BoardGamePublicNoPlays from src.classes.boardgame_classes import BoardGame, BoardGamePublicNoPlays

View file

@ -1,14 +1,17 @@
from sqlmodel import SQLModel, Field, Relationship from sqlmodel import SQLModel, Field, Relationship
from src.classes.play_classes import PlayPlayer from src.classes.play_classes import PlayPlayer, PlayPlayerPublicNoPlayer
class Player(SQLModel, table=True): class PlayerBase(SQLModel):
name: str
class Player(PlayerBase, table=True):
name: str | None = Field(default=None, primary_key=True) name: str | None = Field(default=None, primary_key=True)
playplayers: list[PlayPlayer] = Relationship(back_populates="player") playplayers: list[PlayPlayer] = Relationship(back_populates="player")
class PlayerPublic(SQLModel): class PlayerPublic(PlayerBase):
name: str playplayers: list[PlayPlayerPublicNoPlayer]
class PlayerPublicNoPlayPlayers(SQLModel): class PlayerPublicNoPlayPlayers(PlayerBase):
name: str pass

View file

@ -8,7 +8,7 @@ from fastapi import FastAPI, Depends
from fastapi.middleware.cors import CORSMiddleware from fastapi.middleware.cors import CORSMiddleware
from contextlib import asynccontextmanager from contextlib import asynccontextmanager
from src.classes import boardgame_classes, play_classes, statistic_classes, people_classes from src.classes import boardgame_classes, play_classes, statistic_classes, people_classes, player_classes
from src.modules import data_connection, statistic_creator from src.modules import data_connection, statistic_creator
from src.filters import boardgame_filters, play_filters from src.filters import boardgame_filters, play_filters
@ -152,8 +152,19 @@ def get_plays(query: PlayFilterParams = Depends(), boardgame_id: int = -1, sessi
return requested_plays return requested_plays
@app.get('/players', response_model=list[player_classes.PlayerPublicNoPlayPlayers])
def get_players(session: Session = Depends(get_session)):
requested_players = data_connection.get_all_players(session)
@app.get('/players', response_model=list[play_classes.PlayPlayerPublic]) return requested_players
@app.get('/player', response_model=player_classes.PlayerPublic)
def get_player(player_name: str, session: Session = Depends(get_session)):
requested_players = data_connection.get_player(player_name.title(), session)
return requested_players
@app.get('/players_from_play', response_model=list[play_classes.PlayPlayerPublic])
def get_players_from_play(play_id: int, session: Session = Depends(get_session)): def get_players_from_play(play_id: int, session: Session = Depends(get_session)):
requested_players = data_connection.get_players_from_play(session, play_id) requested_players = data_connection.get_players_from_play(session, play_id)

View file

@ -5,7 +5,7 @@ from threading import Lock
critical_function_lock = Lock() critical_function_lock = Lock()
from src.modules import bgg_connection, db_connection from src.modules import bgg_connection, db_connection
from src.classes import boardgame_classes, play_classes, people_classes from src.classes import boardgame_classes, play_classes, people_classes, player_classes
def get_db_engine(): def get_db_engine():
return db_connection.get_engine() return db_connection.get_engine()
@ -119,6 +119,22 @@ def get_players_from_play(session: Session, play_id: int) -> list[play_classes.P
return players_from_db return players_from_db
def get_all_players(session: Session) -> list[player_classes.Player]:
players_from_db = db_connection.get_all_players(session)
if len(players_from_db) == 0:
all_plays = bgg_connection.get_plays()
db_connection.add_multiple_plays(session, all_plays)
players_from_db = db_connection.get_all_players(session)
return players_from_db
def get_player(player_name: str, session: Session) -> player_classes.Player:
player_from_db = db_connection.get_player(player_name, session)
return player_from_db
def get_designers(session: Session) -> list[people_classes.Designer]: def get_designers(session: Session) -> list[people_classes.Designer]:
designers_from_db = db_connection.get_all_designers(session) designers_from_db = db_connection.get_all_designers(session)
return designers_from_db return designers_from_db

View file

@ -123,6 +123,18 @@ def get_all_designers(session: Session) -> list[people_classes.Designer]:
designers = results.all() designers = results.all()
return designers return designers
def get_player(player_name: str, session: Session) -> player_classes.Player:
statement = statement = select(player_classes.Player).where(player_classes.Player.name == player_name)
results = session.exec(statement)
player = results.one_or_none()
return player
def get_all_players(session: Session) -> list[player_classes.Player]:
statement = statement = select(player_classes.Player)
results = session.exec(statement)
players = results.all()
return players
def get_boardgame(session: Session, boardgame_id: int) -> boardgame_classes.BoardGame: def get_boardgame(session: Session, boardgame_id: int) -> boardgame_classes.BoardGame:
statement = select(boardgame_classes.BoardGame).where(boardgame_classes.BoardGame.id == boardgame_id) statement = select(boardgame_classes.BoardGame).where(boardgame_classes.BoardGame.id == boardgame_id)