from sqlalchemy import ForeignKey, SmallInteger, String, UniqueConstraint from sqlalchemy.orm import Mapped, mapped_column, relationship from app.core.database import Base class RouteEncounter(Base): __tablename__ = "route_encounters" __table_args__ = ( UniqueConstraint( "route_id", "pokemon_id", "encounter_method", "game_id", name="uq_route_pokemon_method_game" ), ) id: Mapped[int] = mapped_column(primary_key=True) route_id: Mapped[int] = mapped_column(ForeignKey("routes.id"), index=True) pokemon_id: Mapped[int] = mapped_column(ForeignKey("pokemon.id"), index=True) game_id: Mapped[int] = mapped_column(ForeignKey("games.id"), index=True) encounter_method: Mapped[str] = mapped_column(String(30)) encounter_rate: Mapped[int] = mapped_column(SmallInteger) min_level: Mapped[int] = mapped_column(SmallInteger) max_level: Mapped[int] = mapped_column(SmallInteger) route: Mapped["Route"] = relationship(back_populates="route_encounters") pokemon: Mapped["Pokemon"] = relationship(back_populates="route_encounters") game: Mapped["Game"] = relationship() def __repr__(self) -> str: return f""