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")
class PlayPlayerPublic(PlayPlayerBase):
id: int
name: str
player: "PlayerPublicNoPlayPlayers"
play: "PlayPublic"
class PlayPlayerPublicNoPlay(PlayPlayerBase):
name: str
player: "PlayerPublicNoPlayPlayers"
class PlayPlayerPublicWithPlay(PlayPlayerPublic):
class PlayPlayerPublicNoPlayer(PlayPlayerBase):
name: str
play: "PlayPublic"
@ -47,12 +51,12 @@ class Play(PlayBase, table=True):
}
class PlayPublic(PlayBase):
players: list[PlayPlayerPublic]
players: list[PlayPlayerPublicNoPlay]
boardgame: "BoardGamePublicNoPlays"
class PlayPublicNoGame(PlayBase):
players: list[PlayPlayerPublic] = []
players: list[PlayPlayerPublicNoPlay] = []
from src.classes.boardgame_classes import BoardGame, BoardGamePublicNoPlays

View file

@ -1,14 +1,17 @@
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)
playplayers: list[PlayPlayer] = Relationship(back_populates="player")
class PlayerPublic(SQLModel):
name: str
class PlayerPublic(PlayerBase):
playplayers: list[PlayPlayerPublicNoPlayer]
class PlayerPublicNoPlayPlayers(SQLModel):
name: str
class PlayerPublicNoPlayPlayers(PlayerBase):
pass

View file

@ -8,7 +8,7 @@ from fastapi import FastAPI, Depends
from fastapi.middleware.cors import CORSMiddleware
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.filters import boardgame_filters, play_filters
@ -152,8 +152,19 @@ def get_plays(query: PlayFilterParams = Depends(), boardgame_id: int = -1, sessi
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)):
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()
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():
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
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]:
designers_from_db = db_connection.get_all_designers(session)
return designers_from_db

View file

@ -123,6 +123,18 @@ def get_all_designers(session: Session) -> list[people_classes.Designer]:
designers = results.all()
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:
statement = select(boardgame_classes.BoardGame).where(boardgame_classes.BoardGame.id == boardgame_id)