from datetime import datetime, timezone from typing import Optional from pydantic import ConfigDict from sqlmodel import Field, SQLModel class PlaylistSynchronizationLog(SQLModel, table=True): """Maps to tblPlaylistSynchronizationLog.""" __tablename__ = "tblPlaylistSynchronizationLog" model_config = ConfigDict(populate_by_name=True) # type: ignore[assignment] sync_id: int = Field( primary_key=True, foreign_key="tblPlaylistSynchronization.id", alias="playlistSynchronizationId", sa_column_kwargs={"name": "PlaylistSynchronizationId"}, ) time: datetime = Field( primary_key=True, default_factory=lambda: datetime.now(timezone.utc), alias="time", sa_column_kwargs={"name": "Time"}, ) made_changes: bool = Field( default=False, alias="madeChanges", sa_column_kwargs={"name": "MadeChanges"} ) added_tracks: int = Field( default=0, alias="addedTracks", sa_column_kwargs={"name": "AddedTracks"} ) deleted_tracks: int = Field( default=0, alias="deletedTracks", sa_column_kwargs={"name": "DeletedTracks"} ) deleted_duplicates: int = Field( default=0, alias="deletedDuplicates", sa_column_kwargs={"name": "DeletedDuplicates"}, ) source_tracks: int = Field( default=0, alias="sourceTracks", sa_column_kwargs={"name": "SourceTracks"} ) # source playlist track count target_track_count: int = Field( default=0, alias="targetTrackCount", sa_column_kwargs={"name": "TargetTrackCount"}, ) error_message: Optional[str] = Field( default=None, alias="errorMessage", sa_column_kwargs={"name": "ErrorMessage"} ) triggered_manually: bool = Field( default=False, alias="triggeredManually", sa_column_kwargs={"name": "TriggeredManually"}, ) error: Optional[str] = Field( default=None, alias="error", sa_column_kwargs={"name": "Error"} ) # SyncError enum name, null = no error