from typing import TYPE_CHECKING from sqlmodel import Field, Relationship, UniqueConstraint from app.models.base import BaseModel if TYPE_CHECKING: from app.models.sound import Sound from app.models.user import User class Stream(BaseModel, table=True): """Database model for a stream.""" service: str = Field(nullable=False) service_id: str = Field(nullable=False) user_id: int = Field(foreign_key="user.id", nullable=False) sound_id: int | None = Field(foreign_key="sound.id", default=None) url: str = Field(nullable=False) title: str | None = Field(default=None) track: str | None = Field(default=None) artist: str | None = Field(default=None) album: str | None = Field(default=None) genre: str | None = Field(default=None) status: str = Field(nullable=False, default="pending") error: str | None = Field(default=None) # constraints __table_args__ = ( UniqueConstraint( "service", "service_id", name="uq_stream_service_service_id", ), ) # relationships sound: "Sound" = Relationship(back_populates="streams") user: "User" = Relationship(back_populates="streams")