from typing import TYPE_CHECKING from sqlmodel import Field, Relationship from app.models.base import BaseModel if TYPE_CHECKING: from app.models.sound import Sound from app.models.user import User class Extraction(BaseModel, table=True): """Database model for a stream.""" service: str | None = Field(default=None) service_id: str | None = Field(default=None) 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 - only enforce uniqueness when both service and service_id are not null __table_args__ = () # relationships sound: "Sound" = Relationship(back_populates="extractions") user: "User" = Relationship(back_populates="extractions")