from sqlalchemy import ForeignKey, SmallInteger, String from sqlalchemy.orm import Mapped, mapped_column, relationship from app.core.database import Base class Evolution(Base): __tablename__ = "evolutions" id: Mapped[int] = mapped_column(primary_key=True) from_pokemon_id: Mapped[int] = mapped_column(ForeignKey("pokemon.id"), index=True) to_pokemon_id: Mapped[int] = mapped_column(ForeignKey("pokemon.id"), index=True) trigger: Mapped[str] = mapped_column(String(30)) # level-up, trade, use-item, etc. min_level: Mapped[int | None] = mapped_column(SmallInteger) item: Mapped[str | None] = mapped_column(String(50)) # e.g. thunder-stone held_item: Mapped[str | None] = mapped_column(String(50)) condition: Mapped[str | None] = mapped_column(String(200)) # catch-all for other conditions region: Mapped[str | None] = mapped_column(String(30)) from_pokemon: Mapped["Pokemon"] = relationship(foreign_keys=[from_pokemon_id]) to_pokemon: Mapped["Pokemon"] = relationship(foreign_keys=[to_pokemon_id]) def __repr__(self) -> str: return f""