from datetime import datetime from typing import Optional from pydantic import ConfigDict from sqlmodel import Field, SQLModel class ServiceAccount(SQLModel, table=True): """Maps to tblServiceAccount in the existing MySQL schema.""" __tablename__ = "tblServiceAccount" model_config = ConfigDict(populate_by_name=True) # type: ignore[assignment] id: Optional[int] = Field(default=None, primary_key=True) service_type: int = Field( alias="serviceType", sa_column_kwargs={"name": "ServiceType"} ) # ServiceType enum (0=Spotify, 1=Deezer, ...) music_service_id: int = Field( alias="musicServiceId", sa_column_kwargs={"name": "MusicServiceId"} ) # MusicService enum (1=Spotify, 2=Deezer, ...) display_name: Optional[str] = Field( default=None, alias="displayName", sa_column_kwargs={"name": "DisplayName"} ) user_identifier: str = Field( alias="userIdentifier", sa_column_kwargs={"name": "UserIdentifier"} ) # Spotify user ID / Deezer user ID / YouTube channel access_token: Optional[str] = Field( default=None, alias="accessToken", sa_column_kwargs={"name": "AccessToken"} ) access_token_expiry: Optional[int] = Field( default=None, alias="accessTokenExpiry", sa_column_kwargs={"name": "AccessTokenExpiry"}, ) refresh_token: Optional[str] = Field( default=None, alias="refreshToken", sa_column_kwargs={"name": "RefreshToken"} ) updated_date: Optional[datetime] = Field( default=None, alias="updatedDate", sa_column_kwargs={"name": "UpdatedDate"} ) application_id: Optional[int] = Field( default=None, alias="applicationId", sa_column_kwargs={"name": "ApplicationId"} ) channel_name: Optional[str] = Field( default=None, alias="channelName", sa_column_kwargs={"name": "ChannelName"} ) spotify_client_id_key: Optional[int] = Field( default=None, alias="spotifyClientIdKey", sa_column_kwargs={"name": "SpotifyClientIdKey"}, ) redirect_uri: Optional[str] = Field( default=None, alias="redirectUri", sa_column_kwargs={"name": "RedirectUri"} )