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)
|
id: int = Field(primary_key=True)
|
||||||
type: BoardgameType = BoardgameType.BOARDGAME
|
type: BoardgameType = BoardgameType.BOARDGAME
|
||||||
designers: list["Designer"] = Relationship(back_populates="designed_boardgames", link_model=many_to_many_links.DesignerBoardGameLink)
|
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")
|
expansion_info: Optional["ExpansionInfo"] = Relationship(back_populates="boardgame")
|
||||||
|
|
||||||
|
|
@ -51,6 +52,7 @@ class BoardGame(BoardGameBase, table=True):
|
||||||
class BoardGamePublic(BoardGameBase):
|
class BoardGamePublic(BoardGameBase):
|
||||||
id: int
|
id: int
|
||||||
designers: list["DesignerPublicNoGames"]
|
designers: list["DesignerPublicNoGames"]
|
||||||
|
artists: list["ArtistPublicNoGames"]
|
||||||
expansion_info: Optional["ExpansionInfoPublicNoGame"]
|
expansion_info: Optional["ExpansionInfoPublicNoGame"]
|
||||||
owned_info: Optional["OwnedInfoPublicNoGame"]
|
owned_info: Optional["OwnedInfoPublicNoGame"]
|
||||||
wishlist_info: Optional["WishlistInfoPublicNoGame"]
|
wishlist_info: Optional["WishlistInfoPublicNoGame"]
|
||||||
|
|
@ -59,6 +61,7 @@ class BoardGamePublic(BoardGameBase):
|
||||||
class BoardGamePublicNoPlays(BoardGameBase):
|
class BoardGamePublicNoPlays(BoardGameBase):
|
||||||
id: int
|
id: int
|
||||||
designers: list["DesignerPublicNoGames"]
|
designers: list["DesignerPublicNoGames"]
|
||||||
|
artists: list["ArtistPublicNoGames"]
|
||||||
expansion_info: Optional["ExpansionInfoPublicNoGame"]
|
expansion_info: Optional["ExpansionInfoPublicNoGame"]
|
||||||
owned_info: Optional["OwnedInfoPublicNoGame"]
|
owned_info: Optional["OwnedInfoPublicNoGame"]
|
||||||
wishlist_info: Optional["WishlistInfoPublicNoGame"]
|
wishlist_info: Optional["WishlistInfoPublicNoGame"]
|
||||||
|
|
@ -127,5 +130,5 @@ class WishlistInfoPublicNoGame(SQLModel):
|
||||||
|
|
||||||
|
|
||||||
from src.classes.play_classes import Play, PlayPublicNoGame
|
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()
|
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)
|
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)
|
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)
|
id: int = Field(primary_key=True)
|
||||||
name: str
|
name: str
|
||||||
designed_boardgames: list[boardgame_classes.BoardGame] | None = Relationship(back_populates="designers", link_model=many_to_many_links.DesignerBoardGameLink)
|
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):
|
class DesignerPublic(SQLModel):
|
||||||
name: str
|
name: str
|
||||||
|
|
@ -14,3 +13,16 @@ class DesignerPublic(SQLModel):
|
||||||
|
|
||||||
class DesignerPublicNoGames(SQLModel):
|
class DesignerPublicNoGames(SQLModel):
|
||||||
name: str
|
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')
|
all_links = boardgame_xml.findall('link')
|
||||||
|
|
||||||
designers = []
|
designers = []
|
||||||
|
artists = []
|
||||||
|
|
||||||
for link in all_links:
|
for link in all_links:
|
||||||
match link.get('type'):
|
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_name = link.get('value')
|
||||||
designer = people_classes.Designer(id=designer_id, name=designer_name)
|
designer = people_classes.Designer(id=designer_id, name=designer_name)
|
||||||
designers.append(designer)
|
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 = {
|
boardgame_dict = {
|
||||||
"id" : int(boardgame_xml.get('id')),
|
"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')),
|
"min_playing_time" : int(boardgame_xml.find('minplaytime').get('value')),
|
||||||
"max_playing_time" : int(boardgame_xml.find('maxplaytime').get('value')),
|
"max_playing_time" : int(boardgame_xml.find('maxplaytime').get('value')),
|
||||||
"min_age" : int(boardgame_xml.find('minage').get('value')),
|
"min_age" : int(boardgame_xml.find('minage').get('value')),
|
||||||
"designers" : designers
|
"designers" : designers,
|
||||||
|
"artists" : artists
|
||||||
}
|
}
|
||||||
|
|
||||||
boardgame = boardgame_classes.BoardGame(**boardgame_dict)
|
boardgame = boardgame_classes.BoardGame(**boardgame_dict)
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,12 @@ def add_boardgame(session: Session, boardgame: boardgame_classes.BoardGame):
|
||||||
if designer_in_db != None:
|
if designer_in_db != None:
|
||||||
boardgame.designers[designer_index] = designer_in_db
|
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(
|
is_boardgame_present = len(session.exec(
|
||||||
select(boardgame_classes.BoardGame).where(boardgame_classes.BoardGame.id == boardgame.id)
|
select(boardgame_classes.BoardGame).where(boardgame_classes.BoardGame.id == boardgame.id)
|
||||||
).all()) != 0
|
).all()) != 0
|
||||||
|
|
@ -81,6 +87,12 @@ def upsert_multiple_boardgames(session: Session, boardgame_list: list[boardgame_
|
||||||
if designer_in_db != None:
|
if designer_in_db != None:
|
||||||
boardgame.designers[designer_index] = designer_in_db
|
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)
|
session.add(boardgame)
|
||||||
altered_boardgames.append(boardgame)
|
altered_boardgames.append(boardgame)
|
||||||
|
|
||||||
|
|
@ -107,6 +119,18 @@ def get_designer(session: Session, designer_id: int) -> people_classes.Designer:
|
||||||
|
|
||||||
return 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]:
|
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))
|
statement = select(people_classes.Designer).where(people_classes.Designer.id.in_(designer_ids))
|
||||||
results = session.exec(statement)
|
results = session.exec(statement)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue