from __future__ import annotations from typing import TYPE_CHECKING, Optional from sqlalchemy import String, false, text, true from sqlalchemy.dialects.mysql import TINYINT from sqlalchemy.orm import Mapped, mapped_column, relationship from .base import Base from .utils import BooleanBit if TYPE_CHECKING: from src.playlist_sync.models import PlaylistSynchronization from src.service_account.models import ServiceAccount __all__ = ["ApplicationInstance"] class ApplicationInstance(Base): __tablename__ = "tblApplicationInstance" id: Mapped[int] = mapped_column("intApplicationInstanceID", primary_key=True) language_id: Mapped[Optional[str]] = mapped_column("strLanguageID", String(15)) spotify_region_id: Mapped[Optional[str]] = mapped_column("strSpotifyRegionID", String(50)) main_application: Mapped[bool] = mapped_column("blnMainApplication", server_default=false()) main_domain: Mapped[Optional[str]] = mapped_column("strMainDomain", String(45)) name: Mapped[str] = mapped_column("strName", String(45)) fallback_application: Mapped[bool] = mapped_column("blnFallbackApplication", server_default=false()) active: Mapped[bool] = mapped_column("blnActive", TINYINT(1), server_default=true()) ga_country_name: Mapped[str] = mapped_column("strGACountryName", String(45)) global_push: Mapped[bool] = mapped_column("blnGlobalPush", server_default=false()) workout: Mapped[bool] = mapped_column("blnWorkout", BooleanBit, server_default=text("0")) include_other_playlists: Mapped[bool] = mapped_column( "blnIncludeOtherPlaylists", BooleanBit, server_default=text("0") ) default_service: Mapped[Optional[str]] = mapped_column("strDefaultService", String(10)) service_list: Mapped[Optional[str]] = mapped_column("strServiceList", String(255)) playlist_synchronizations: Mapped["PlaylistSynchronization"] = relationship( back_populates="application", lazy="raise" ) service_accounts: Mapped["ServiceAccount"] = relationship(back_populates="application", lazy="raise")