Redesign1 #1

Merged
yaro merged 36 commits from Redesign1 into main 2025-09-22 14:12:39 -05:00
6 changed files with 102 additions and 6 deletions
Showing only changes of commit ba7428d926 - Show all commits

View file

@ -1,4 +1,4 @@
from sqlalchemy import Column, Integer, String, ForeignKey, Boolean, Enum as SQLEnum from sqlalchemy import Column, Integer, String, ForeignKey, Boolean, DateTime, JSON, Enum as SQLEnum, func
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship
from crudkit.core.base import CRUDMixin, Base from crudkit.core.base import CRUDMixin, Base
from enum import Enum from enum import Enum
@ -10,18 +10,42 @@ class ObjectType(str, Enum):
PLAYER = "player" PLAYER = "player"
PROGRAM = "program" PROGRAM = "program"
TYPE_SUFFIXES = {
ObjectType.ROOM: "R",
ObjectType.EXIT: "E",
ObjectType.PLAYER: "P",
ObjectType.PROGRAM: "F",
ObjectType.THING: "",
}
class Dbref(Base, CRUDMixin): class Dbref(Base, CRUDMixin):
__tablename__ = "dbref" __tablename__ = "dbref"
type = Column(SQLEnum(ObjectType, name="object_type_enum"), nullable=False) type = Column(SQLEnum(ObjectType, name="object_type_enum"), nullable=False)
name = Column(String, nullable=False) name = Column(String, nullable=False)
props = Column(JSON, nullable=False, default={})
is_deleted = Column(Boolean, nullable=False, default=False) is_deleted = Column(Boolean, nullable=False, default=False)
owner_id = Column(Integer, ForeignKey("dbref.id")) last_used = Column(DateTime, nullable=False, default=func.now())
location_id = Column(Integer, ForeignKey("dbref.id")) use_count = Column(Integer, nullable=False, default=0)
owner = relationship("Dbref", remote_side=[CRUDMixin.id], foreign_keys=[owner_id]) location_id = Column(Integer, ForeignKey("dbref.id"), nullable=False)
location = relationship("Dbref", remote_side=[CRUDMixin.id], foreign_keys=[location_id]) location = relationship("Dbref", remote_side=[CRUDMixin.id], foreign_keys=[location_id], back_populates="contents")
contents = relationship("Dbref", backref="location", foreign_keys=location_id)
exits = relationship("Exit", backref="source", foreign_keys=location_id)
owner_id = Column(Integer, ForeignKey("dbref.id"), nullable=False)
owner = relationship("Player", remote_side=[CRUDMixin.id], foreign_keys=[owner_id])
creator_id = Column(Integer, ForeignKey("dbref.id"), nullable=False)
creator = relationship("Player", remote_side=[CRUDMixin.id], foreign_keys=[creator_id])
modifier_id = Column(Integer, ForeignKey("dbref.id"), nullable=False)
modifier = relationship("Player", remote_side=[CRUDMixin.id], foreign_keys=[modifier_id])
last_user_id = Column(Integer, ForeignKey("dbref.id"), nullable=False)
last_user = relationship("Player", remote_side=[CRUDMixin.id], foreign_keys=[last_user_id])
__mapper_args__ = { __mapper_args__ = {
"polymorphic_on": type, "polymorphic_on": type,
@ -29,11 +53,19 @@ class Dbref(Base, CRUDMixin):
} }
def __str__(self): def __str__(self):
return f"#{self.id} ({self.type}): {self.name}" suffix = TYPE_SUFFIXES.get(self.type, "")
return f"#{self.id}{suffix}"
def __repr__(self):
suffix = TYPE_SUFFIXES.get(self.type, "")
return f"<Dbref #{self.id}{suffix}>"
def is_type(self, *types: ObjectType) -> bool: def is_type(self, *types: ObjectType) -> bool:
return self.type in types return self.type in types
def display_type(self) -> str:
return self.type.value.upper()
@property @property
def is_room(self): return self.is_type(ObjectType.ROOM) def is_room(self): return self.is_type(ObjectType.ROOM)

View file

@ -1,6 +1,18 @@
from sqlalchemy import Column, Integer, ForeignKey
from sqlalchemy.orm import relationship
from crudkit.core.base import CRUDMixin
from muck.models.dbref import Dbref, ObjectType from muck.models.dbref import Dbref, ObjectType
class Exit(Dbref): class Exit(Dbref):
__tablename__ = "exits"
id = Column(Integer, ForeignKey("dbref.id"), primary_key=True)
destination_id = Column(Integer, ForeignKey("dbref.id"), nullable=True)
destination = relationship("Dbref", remote_side=[CRUDMixin.id], foreign_keys=[destination_id])
__mapper_args__ = { __mapper_args__ = {
"polymorphic_identity": ObjectType.EXIT "polymorphic_identity": ObjectType.EXIT
} }

View file

@ -1,6 +1,26 @@
from sqlalchemy import Column, Integer, Boolean, String, ForeignKey
from sqlalchemy.orm import relationship
from crudkit.core.base import CRUDMixin
from muck.models.dbref import Dbref, ObjectType from muck.models.dbref import Dbref, ObjectType
class Player(Dbref): class Player(Dbref):
__tablename__ = "players"
id = Column(Integer, ForeignKey("dbref.id"), primary_key=True)
pennies = Column(Integer, nullable=False, default=0)
insert_mode = Column(Boolean, nullable=False, default=False)
block = Column(Integer, nullable=True)
password = Column(String, nullable=False)
home_id = Column(Integer, ForeignKey("dbref.id"), nullable=False)
home = relationship("Dbref", remote_side=[CRUDMixin.id], foreign_keys=[home_id])
current_program_id = Column(Integer, ForeignKey("dbref.id"), nullable=True)
current_program = relationship("Dbref", remote_side=[CRUDMixin.id], foreign_keys=[current_program_id])
__mapper_args__ = { __mapper_args__ = {
"polymorphic_identity": ObjectType.PLAYER "polymorphic_identity": ObjectType.PLAYER
} }

View file

@ -1,6 +1,12 @@
from sqlalchemy import Column, Integer, ForeignKey
from muck.models.dbref import Dbref, ObjectType from muck.models.dbref import Dbref, ObjectType
class Program(Dbref): class Program(Dbref):
__tablename__ = "programs"
id = Column(Integer, ForeignKey("dbref.id"), primary_key=True)
__mapper_args__ = { __mapper_args__ = {
"polymorphic_identity": ObjectType.PROGRAM "polymorphic_identity": ObjectType.PROGRAM
} }

View file

@ -1,6 +1,18 @@
from sqlalchemy import Column, Integer, ForeignKey
from sqlalchemy.orm import relationship
from crudkit.core.base import CRUDMixin
from muck.models.dbref import Dbref, ObjectType from muck.models.dbref import Dbref, ObjectType
class Room(Dbref): class Room(Dbref):
__tablename__ = "rooms"
id = Column(Integer, ForeignKey("dbref.id"), primary_key=True)
dropto_id = Column(Integer, ForeignKey("dbref.id"), nullable=True)
dropto = relationship("Dbref", remote_side=[CRUDMixin.id], foreign_keys=[dropto_id])
__mapper_args__ = { __mapper_args__ = {
"polymorphic_identity": ObjectType.ROOM "polymorphic_identity": ObjectType.ROOM
} }

View file

@ -1,6 +1,20 @@
from sqlalchemy import Column, Integer, ForeignKey
from sqlalchemy.orm import relationship
from crudkit.core.base import CRUDMixin
from muck.models.dbref import Dbref, ObjectType from muck.models.dbref import Dbref, ObjectType
class Thing(Dbref): class Thing(Dbref):
__tablename__ = "things"
id = Column(Integer, ForeignKey("dbref.id"), primary_key=True)
value = Column(Integer, nullable=False, default=0)
home_id = Column(Integer, ForeignKey("dbref.id"), nullable=False)
home = relationship("Dbref", remote_side=[CRUDMixin.id], foreign_keys=[home_id])
__mapper_args__ = { __mapper_args__ = {
"polymorphic_identity": ObjectType.THING "polymorphic_identity": ObjectType.THING
} }