from sqlalchemy import String, Integer, Float, ForeignKey, JSON from sqlalchemy.orm import Mapped, mapped_column, relationship from app.core.database import Base class Track(Base): __tablename__ = "tracks" id: Mapped[int] = mapped_column(primary_key=True) playlist_id: Mapped[int] = mapped_column(ForeignKey("playlists.id", ondelete="CASCADE"), index=True) title: Mapped[str] = mapped_column(String(500)) artist: Mapped[str] = mapped_column(String(500)) album: Mapped[str | None] = mapped_column(String(500), nullable=True) spotify_id: Mapped[str | None] = mapped_column(String(255), nullable=True) isrc: Mapped[str | None] = mapped_column(String(20), nullable=True) preview_url: Mapped[str | None] = mapped_column(String(500), nullable=True) image_url: Mapped[str | None] = mapped_column(String(500), nullable=True) # Audio features from Spotify tempo: Mapped[float | None] = mapped_column(Float, nullable=True) energy: Mapped[float | None] = mapped_column(Float, nullable=True) danceability: Mapped[float | None] = mapped_column(Float, nullable=True) valence: Mapped[float | None] = mapped_column(Float, nullable=True) acousticness: Mapped[float | None] = mapped_column(Float, nullable=True) instrumentalness: Mapped[float | None] = mapped_column(Float, nullable=True) genres: Mapped[list | None] = mapped_column(JSON, nullable=True) playlist: Mapped["Playlist"] = relationship(back_populates="tracks") from app.models.playlist import Playlist # noqa: E402, F811