from datetime import datetime from typing import Optional from pydantic import ConfigDict from sqlalchemy import Column, Text from sqlmodel import Field, SQLModel from playlist_sync.models.application import _Bit1Bool class PlaylistSynchronization(SQLModel, table=True): """Maps to tblPlaylistSynchronization.""" __tablename__ = "tblPlaylistSynchronization" model_config = ConfigDict(populate_by_name=True) # type: ignore[assignment] id: Optional[int] = Field(default=None, primary_key=True) application_id: Optional[int] = Field( default=None, alias="applicationId", sa_column_kwargs={"name": "ApplicationId"} ) from_playlist_id: str = Field( alias="fromPlaylistId", sa_column_kwargs={"name": "FromPlaylistId"} ) from_service_type: int = Field( default=0, alias="fromServiceType", sa_column_kwargs={"name": "FromServiceType"} ) # ServiceType enum from_music_service_id: int = Field( default=1, alias="fromMusicServiceId", sa_column_kwargs={"name": "FromMusicServiceId"}, ) # MusicService enum to_playlist_id: str = Field( alias="toPlaylistId", sa_column_kwargs={"name": "ToPlaylistId"} ) to_service_account_id: int = Field( alias="toServiceAccountId", sa_column_kwargs={"name": "ToServiceAccountId"} ) title: Optional[str] = Field( default=None, alias="title", sa_column_kwargs={"name": "Title"} ) description: Optional[str] = Field( default=None, alias="description", sa_column_kwargs={"name": "Description"} ) active: bool = Field( default=True, alias="active", sa_column_kwargs={"name": "Active"} ) created_at: datetime = Field( default_factory=datetime.utcnow, alias="createdAt", sa_column_kwargs={"name": "CreatedAt"}, ) last_updated: Optional[datetime] = Field( default=None, alias="lastUpdated", sa_column_kwargs={"name": "LastUpdated"} ) title_copy_mode: int = Field( default=0, alias="titleCopyMode", sa_column_kwargs={"name": "TitleCopyMode"} ) # FieldCopyMode enum description_copy_mode: int = Field( default=0, alias="descriptionCopyMode", sa_column_kwargs={"name": "DescriptionCopyMode"}, ) # FieldCopyMode enum append_track_list: bool = Field( default=False, alias="appendTrackList", sa_column=Column("AppendTrackList", _Bit1Bool(), default=False), ) source_title: Optional[str] = Field( default=None, alias="sourceTitle", sa_column_kwargs={"name": "SourceTitle"} ) source_image: Optional[str] = Field( default=None, alias="sourceImage", sa_column=Column("SourceImage", Text, default=None), ) source_track_count: int = Field( default=0, alias="sourceTrackCount", sa_column_kwargs={"name": "SourceTrackCount"}, ) synchronized_track_count: int = Field( default=0, alias="synchronizedTrackCount", sa_column_kwargs={"name": "SynchronizedTrackCount"}, ) error: bool = Field( default=False, alias="error", sa_column=Column("Error", _Bit1Bool(), default=False), ) # True if last sync had an error source_service_account_id: Optional[str] = Field( default=None, alias="sourceServiceAccountId", sa_column_kwargs={"name": "SourceServiceAccountId"}, ) source_service_account_name: Optional[str] = Field( default=None, alias="sourceServiceAccountName", sa_column_kwargs={"name": "SourceServiceAccountName"}, ) to_playlist_title: Optional[str] = Field( default=None, alias="toPlaylistTitle", sa_column_kwargs={"name": "ToPlaylistTitle"}, ) to_playlist_image: Optional[str] = Field( default=None, alias="toPlaylistImage", sa_column=Column("ToPlaylistImage", Text, default=None), )