Added artists to boardgames
This commit is contained in:
parent
1234579701
commit
9cd614e3a0
5 changed files with 54 additions and 4 deletions
|
|
@ -35,6 +35,7 @@ class BoardGame(BoardGameBase, table=True):
|
|||
id: int = Field(primary_key=True)
|
||||
type: BoardgameType = BoardgameType.BOARDGAME
|
||||
designers: list["Designer"] = Relationship(back_populates="designed_boardgames", link_model=many_to_many_links.DesignerBoardGameLink)
|
||||
artists: list["Artist"] = Relationship(back_populates="drawn_boardgames", link_model=many_to_many_links.ArtistBoardGameLink)
|
||||
|
||||
expansion_info: Optional["ExpansionInfo"] = Relationship(back_populates="boardgame")
|
||||
|
||||
|
|
@ -51,6 +52,7 @@ class BoardGame(BoardGameBase, table=True):
|
|||
class BoardGamePublic(BoardGameBase):
|
||||
id: int
|
||||
designers: list["DesignerPublicNoGames"]
|
||||
artists: list["ArtistPublicNoGames"]
|
||||
expansion_info: Optional["ExpansionInfoPublicNoGame"]
|
||||
owned_info: Optional["OwnedInfoPublicNoGame"]
|
||||
wishlist_info: Optional["WishlistInfoPublicNoGame"]
|
||||
|
|
@ -59,6 +61,7 @@ class BoardGamePublic(BoardGameBase):
|
|||
class BoardGamePublicNoPlays(BoardGameBase):
|
||||
id: int
|
||||
designers: list["DesignerPublicNoGames"]
|
||||
artists: list["ArtistPublicNoGames"]
|
||||
expansion_info: Optional["ExpansionInfoPublicNoGame"]
|
||||
owned_info: Optional["OwnedInfoPublicNoGame"]
|
||||
wishlist_info: Optional["WishlistInfoPublicNoGame"]
|
||||
|
|
@ -127,5 +130,5 @@ class WishlistInfoPublicNoGame(SQLModel):
|
|||
|
||||
|
||||
from src.classes.play_classes import Play, PlayPublicNoGame
|
||||
from src.classes.people_classes import Designer, DesignerPublicNoGames
|
||||
from src.classes.people_classes import Designer, DesignerPublicNoGames, Artist, ArtistPublicNoGames
|
||||
BoardGame.model_rebuild()
|
||||
|
|
@ -4,3 +4,7 @@ class DesignerBoardGameLink(SQLModel, table=True):
|
|||
boardgame_id: int | None = Field(default=None, foreign_key="boardgame.id", primary_key=True)
|
||||
designer_id: int | None = Field(default=None, foreign_key="designer.id", primary_key=True)
|
||||
|
||||
|
||||
class ArtistBoardGameLink(SQLModel, table=True):
|
||||
boardgame_id: int | None = Field(default=None, foreign_key="boardgame.id", primary_key=True)
|
||||
artist_id: int | None = Field(default=None, foreign_key="artist.id", primary_key=True)
|
||||
|
|
@ -6,7 +6,6 @@ class Designer(SQLModel, table=True):
|
|||
id: int = Field(primary_key=True)
|
||||
name: str
|
||||
designed_boardgames: list[boardgame_classes.BoardGame] | None = Relationship(back_populates="designers", link_model=many_to_many_links.DesignerBoardGameLink)
|
||||
# designed_expansions: list[boardgame_classes.BoardGameExpansion] | None = Relationship(back_populates="designers", link_model=many_to_many_links.DesignerBoardGameExpansionLink)
|
||||
|
||||
class DesignerPublic(SQLModel):
|
||||
name: str
|
||||
|
|
@ -14,3 +13,16 @@ class DesignerPublic(SQLModel):
|
|||
|
||||
class DesignerPublicNoGames(SQLModel):
|
||||
name: str
|
||||
|
||||
|
||||
class Artist(SQLModel, table=True):
|
||||
id: int = Field(primary_key=True)
|
||||
name: str
|
||||
drawn_boardgames: list[boardgame_classes.BoardGame] | None = Relationship(back_populates="artists", link_model=many_to_many_links.ArtistBoardGameLink)
|
||||
|
||||
class ArtistPublic(SQLModel):
|
||||
name: str
|
||||
drawn_boardgames: list[boardgame_classes.BoardGamePublicNoPlays]
|
||||
|
||||
class ArtistPublicNoGames(SQLModel):
|
||||
name: str
|
||||
|
|
@ -81,6 +81,7 @@ def convert_xml_to_boardgame(boardgame_xml: ET.Element) -> boardgame_classes.Boa
|
|||
all_links = boardgame_xml.findall('link')
|
||||
|
||||
designers = []
|
||||
artists = []
|
||||
|
||||
for link in all_links:
|
||||
match link.get('type'):
|
||||
|
|
@ -91,6 +92,11 @@ def convert_xml_to_boardgame(boardgame_xml: ET.Element) -> boardgame_classes.Boa
|
|||
designer_name = link.get('value')
|
||||
designer = people_classes.Designer(id=designer_id, name=designer_name)
|
||||
designers.append(designer)
|
||||
case 'boardgameartist':
|
||||
artist_id = int(link.get('id'))
|
||||
artist_name = link.get('value')
|
||||
artist = people_classes.Artist(id=artist_id, name=artist_name)
|
||||
artists.append(artist)
|
||||
|
||||
boardgame_dict = {
|
||||
"id" : int(boardgame_xml.get('id')),
|
||||
|
|
@ -105,7 +111,8 @@ def convert_xml_to_boardgame(boardgame_xml: ET.Element) -> boardgame_classes.Boa
|
|||
"min_playing_time" : int(boardgame_xml.find('minplaytime').get('value')),
|
||||
"max_playing_time" : int(boardgame_xml.find('maxplaytime').get('value')),
|
||||
"min_age" : int(boardgame_xml.find('minage').get('value')),
|
||||
"designers" : designers
|
||||
"designers" : designers,
|
||||
"artists" : artists
|
||||
}
|
||||
|
||||
boardgame = boardgame_classes.BoardGame(**boardgame_dict)
|
||||
|
|
|
|||
|
|
@ -30,6 +30,12 @@ def add_boardgame(session: Session, boardgame: boardgame_classes.BoardGame):
|
|||
if designer_in_db != None:
|
||||
boardgame.designers[designer_index] = designer_in_db
|
||||
|
||||
boardgame_artists = boardgame.artists
|
||||
for artist_index in range(len(boardgame_artists)):
|
||||
artist_in_db = get_artist(session, boardgame_artists[artist_index].id)
|
||||
if artist_in_db != None:
|
||||
boardgame.artists[artist_index] = artist_in_db
|
||||
|
||||
is_boardgame_present = len(session.exec(
|
||||
select(boardgame_classes.BoardGame).where(boardgame_classes.BoardGame.id == boardgame.id)
|
||||
).all()) != 0
|
||||
|
|
@ -81,6 +87,12 @@ def upsert_multiple_boardgames(session: Session, boardgame_list: list[boardgame_
|
|||
if designer_in_db != None:
|
||||
boardgame.designers[designer_index] = designer_in_db
|
||||
|
||||
boardgame_artists = boardgame.artists
|
||||
for artist_index in range(len(boardgame_artists)):
|
||||
artist_in_db = get_artist(session, boardgame_artists[artist_index].id)
|
||||
if artist_in_db != None:
|
||||
boardgame.artists[artist_index] = artist_in_db
|
||||
|
||||
session.add(boardgame)
|
||||
altered_boardgames.append(boardgame)
|
||||
|
||||
|
|
@ -107,6 +119,18 @@ def get_designer(session: Session, designer_id: int) -> people_classes.Designer:
|
|||
|
||||
return designer
|
||||
|
||||
def get_artist(session: Session, artist_id: int) -> people_classes.Artist:
|
||||
statement = select(people_classes.Artist).where(people_classes.Artist.id == artist_id)
|
||||
|
||||
artist = session.exec(statement).all()
|
||||
|
||||
if len(artist) == 0:
|
||||
artist = None
|
||||
else:
|
||||
artist = artist[0]
|
||||
|
||||
return artist
|
||||
|
||||
def get_multiple_designers(session: Session, designer_ids: list[int]) -> list[people_classes.Designer]:
|
||||
statement = select(people_classes.Designer).where(people_classes.Designer.id.in_(designer_ids))
|
||||
results = session.exec(statement)
|
||||
|
|
|
|||
Loading…
Reference in a new issue