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), 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")