""" User Preferences Model Stores user-specific settings like theme and default room. """ import uuid from sqlalchemy import String, ForeignKey from sqlalchemy.dialects.postgresql import UUID, JSONB from sqlalchemy.orm import Mapped, mapped_column, relationship from src.db.database import Base from typing import TYPE_CHECKING if TYPE_CHECKING: from src.db.models.user import User class UserPreferences(Base): """ User preferences model Stores user-specific settings that persist across sessions. Extended settings stored in preferences_json for flexibility. """ __tablename__ = "user_preferences" user_id: Mapped[uuid.UUID] = mapped_column( UUID(as_uuid=True), ForeignKey("users.id", ondelete="CASCADE"), primary_key=True, ) theme: Mapped[str] = mapped_column( String(20), default="system", nullable=False, comment="Theme preference: system, light, dark", ) default_room: Mapped[str] = mapped_column( String(50), default="front-hall", nullable=False, comment="Default room for housekeeping features", ) preferences_json: Mapped[dict] = mapped_column( JSONB, default=dict, nullable=False, comment="Extended preferences as JSON", ) # Relationships user: Mapped["User"] = relationship( "User", back_populates="preferences", ) def __repr__(self) -> str: return f""