"""User settings domain entity (general preferences + scrobbling config).""" import uuid from dataclasses import dataclass # Defaults for a user who has never saved settings — the row is created lazily, # so reads return these before the first write. DEFAULT_THEME = "system" DEFAULT_STREAM_QUALITY = "original" @dataclass(frozen=True, slots=True) class UserSettings: user_id: uuid.UUID theme: str stream_quality: str scrobble_enabled: bool scrobble_provider: str | None scrobble_username: str | None # Scrobbler session key / user token, encrypted at rest (never leaves the # server in plaintext). ``None`` until the user configures scrobbling. scrobble_session_key_enc: str | None @classmethod def defaults(cls, user_id: uuid.UUID) -> UserSettings: return cls( user_id=user_id, theme=DEFAULT_THEME, stream_quality=DEFAULT_STREAM_QUALITY, scrobble_enabled=False, scrobble_provider=None, scrobble_username=None, scrobble_session_key_enc=None, )