from sqlalchemy import Column, Integer, String, Text, DateTime, ForeignKey from sqlalchemy.dialects.postgresql import ENUM from sqlalchemy.orm import relationship from sqlalchemy.sql import func import enum from app.database import Base class WorldVisibility(enum.Enum): PUBLIC = "public" PRIVATE = "private" FRIENDS_ONLY = "friends_only" class World(Base): __tablename__ = "worlds" id = Column(Integer, primary_key=True, index=True) name = Column(String(255), nullable=False) description = Column(Text, nullable=True) owner_id = Column(Integer, ForeignKey("users.id"), nullable=False) visibility = Column( ENUM( WorldVisibility, name="world_visibility", create_type=False, values_callable=lambda enum_cls: [e.value for e in enum_cls], ), default=WorldVisibility.PUBLIC, ) created_at = Column(DateTime(timezone=True), server_default=func.now()) updated_at = Column(DateTime(timezone=True), onupdate=func.now()) owner = relationship("User", back_populates="worlds") assets = relationship("Asset", back_populates="world", cascade="all, delete-orphan") # world_content.py / world_persistence_impl.md ยง4.1. Added here (only) # so PC1/PC2 code depending on this module is otherwise untouched. rooms = relationship("WorldRoom", back_populates="world", cascade="all, delete-orphan")