2026-02-08 12:36:08 +01:00
|
|
|
from sqlalchemy import ForeignKey, SmallInteger, String, UniqueConstraint
|
2026-02-08 11:16:13 +01:00
|
|
|
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
|
|
|
|
|
|
|
|
|
from app.core.database import Base
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class BossBattle(Base):
|
|
|
|
|
__tablename__ = "boss_battles"
|
2026-02-08 12:36:08 +01:00
|
|
|
__table_args__ = (
|
2026-02-10 12:26:57 +01:00
|
|
|
UniqueConstraint(
|
|
|
|
|
"version_group_id", "order", name="uq_boss_battles_version_group_order"
|
|
|
|
|
),
|
2026-02-08 12:36:08 +01:00
|
|
|
)
|
2026-02-08 11:16:13 +01:00
|
|
|
|
|
|
|
|
id: Mapped[int] = mapped_column(primary_key=True)
|
2026-02-08 12:07:42 +01:00
|
|
|
version_group_id: Mapped[int] = mapped_column(
|
|
|
|
|
ForeignKey("version_groups.id"), index=True
|
|
|
|
|
)
|
2026-02-08 11:16:13 +01:00
|
|
|
name: Mapped[str] = mapped_column(String(100))
|
2026-02-10 12:26:57 +01:00
|
|
|
boss_type: Mapped[str] = mapped_column(
|
|
|
|
|
String(20)
|
|
|
|
|
) # gym_leader, elite_four, champion, rival, evil_team, other
|
|
|
|
|
specialty_type: Mapped[str | None] = mapped_column(
|
|
|
|
|
String(20), default=None
|
|
|
|
|
) # pokemon type specialty (e.g. rock, water)
|
2026-02-08 11:16:13 +01:00
|
|
|
badge_name: Mapped[str | None] = mapped_column(String(100))
|
|
|
|
|
badge_image_url: Mapped[str | None] = mapped_column(String(500))
|
|
|
|
|
level_cap: Mapped[int] = mapped_column(SmallInteger)
|
|
|
|
|
order: Mapped[int] = mapped_column(SmallInteger)
|
|
|
|
|
after_route_id: Mapped[int | None] = mapped_column(
|
|
|
|
|
ForeignKey("routes.id"), index=True, default=None
|
|
|
|
|
)
|
|
|
|
|
location: Mapped[str] = mapped_column(String(200))
|
2026-02-08 14:55:26 +01:00
|
|
|
section: Mapped[str | None] = mapped_column(String(100), default=None)
|
2026-02-08 11:16:13 +01:00
|
|
|
sprite_url: Mapped[str | None] = mapped_column(String(500))
|
2026-02-14 11:04:08 +01:00
|
|
|
game_id: Mapped[int | None] = mapped_column(
|
|
|
|
|
ForeignKey("games.id"), index=True, default=None
|
|
|
|
|
)
|
2026-02-08 11:16:13 +01:00
|
|
|
|
2026-02-17 18:17:23 +01:00
|
|
|
version_group: Mapped[VersionGroup] = relationship(back_populates="boss_battles")
|
|
|
|
|
after_route: Mapped[Route | None] = relationship()
|
|
|
|
|
game: Mapped[Game | None] = relationship()
|
|
|
|
|
pokemon: Mapped[list[BossPokemon]] = relationship(
|
2026-02-08 11:16:13 +01:00
|
|
|
back_populates="boss_battle", cascade="all, delete-orphan"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
def __repr__(self) -> str:
|
2026-02-10 12:26:57 +01:00
|
|
|
return (
|
|
|
|
|
f"<BossBattle(id={self.id}, name='{self.name}', type='{self.boss_type}')>"
|
|
|
|
|
)
|