59 lines
2.1 KiB
Python
59 lines
2.1 KiB
Python
import uuid
|
|
from datetime import datetime
|
|
|
|
from sqlmodel import Field, Relationship, SQLModel
|
|
|
|
from model.base import AbstractEntity
|
|
|
|
|
|
class Publisher(AbstractEntity, table=True):
|
|
name: str = Field(index=True, unique=True)
|
|
comics: list["Comic"] = Relationship(back_populates="publisher")
|
|
|
|
def __repr__(self):
|
|
return f'Publisher({self.id} {self.name})'
|
|
|
|
def __str__(self):
|
|
return self.__repr__()
|
|
|
|
|
|
class Comic(AbstractEntity, table=True):
|
|
title: str = Field(index=True, unique=True)
|
|
publisher_id: uuid.UUID | None = Field(default=None, foreign_key="publisher.id")
|
|
publisher: Publisher | None = Relationship(back_populates="comics")
|
|
current_order: int = Field(default=False)
|
|
completed: int = Field(nullable=False)
|
|
#issues: list["Issue"] = Relationship(back_populates="comic")
|
|
#story_arcs: list["StoryArc"] = Relationship(back_populates="comic")
|
|
#trade_paperbacks: list["TradePaperback"] = Relationship(back_populates="comic")
|
|
#volumes: list["Volume"] = Relationship(back_populates="comic")
|
|
#comic_works: list["ComicWork"] = Relationship(back_populates="comic")
|
|
|
|
|
|
class Artist(AbstractEntity, table=True):
|
|
name: str = Field(nullable=False)
|
|
comic_works: list["ComicWork"] = Relationship(back_populates="artist")
|
|
|
|
|
|
class Worktype(AbstractEntity, table=True):
|
|
name: str = Field(nullable=False, unique=True)
|
|
|
|
#comic_works: list["ComicWork"] = Relationship(back_populates="worktype")
|
|
|
|
def __repr__(self):
|
|
return f'Worktype({self.id} {self.version} {self.name} {len(self.comic_works)})'
|
|
|
|
def __str__(self):
|
|
return f'{self.name}({self.id})'
|
|
|
|
|
|
class ComicWork(AbstractEntity, table=True):
|
|
__tablename__ = "comic_work"
|
|
|
|
comic_id: uuid.UUID | None = Field(nullable=False, foreign_key="comic.id")
|
|
#comic: Comic = Relationship(back_populates="comic_works")
|
|
artist_id: uuid.UUID | None = Field(nullable=False, foreign_key="artist.id")
|
|
artist: Artist = Relationship(back_populates="comic_works")
|
|
work_type_id: uuid.UUID | None = Field(nullable=False, foreign_key="worktype.id")
|
|
#worktype = Relationship(back_populates="comic_works")
|