Holy moley is it hard to do MUCK stuff relationally.

This commit is contained in:
Yaro Kasear 2025-09-04 14:36:00 -05:00
parent c72417e5e4
commit d9ed6d5cd7
8 changed files with 89 additions and 24 deletions

View file

@ -1,5 +1,5 @@
from sqlalchemy import Column, Integer, String, ForeignKey, Boolean, DateTime, JSON, Enum as SQLEnum, func
from sqlalchemy.orm import relationship
from sqlalchemy.orm import relationship, foreign, remote
from crudkit.core.base import CRUDMixin, Base
from enum import Enum
@ -29,23 +29,22 @@ class Dbref(Base, CRUDMixin):
last_used = Column(DateTime, nullable=False, default=func.now())
use_count = Column(Integer, nullable=False, default=0)
location_id = Column(Integer, ForeignKey("dbref.id"), nullable=False)
location = relationship("Dbref", remote_side=[CRUDMixin.id], foreign_keys=[location_id], back_populates="contents")
location_id = Column(Integer, ForeignKey("dbref.id"), nullable=True, default=0)
location = relationship("Dbref", foreign_keys=[location_id], back_populates="contents", primaryjoin=lambda: foreign(Dbref.location_id) == remote(Dbref.id), remote_side=lambda: Dbref.id)
contents = relationship("Dbref", backref="location", foreign_keys=location_id)
exits = relationship("Exit", backref="source", foreign_keys=location_id)
contents = relationship("Dbref", foreign_keys=[location_id], back_populates="location")
owner_id = Column(Integer, ForeignKey("dbref.id"), nullable=False)
owner = relationship("Player", remote_side=[CRUDMixin.id], foreign_keys=[owner_id])
owner_id = Column(Integer, ForeignKey("dbref.id"), nullable=True)
owner = relationship("Player", remote_side=[CRUDMixin.id], foreign_keys=[owner_id], primaryjoin=lambda: Dbref.owner_id == remote(Dbref.id), post_update=True)
creator_id = Column(Integer, ForeignKey("dbref.id"), nullable=False)
creator = relationship("Player", remote_side=[CRUDMixin.id], foreign_keys=[creator_id])
creator_id = Column(Integer, ForeignKey("dbref.id"), nullable=True)
creator = relationship("Player", remote_side=[CRUDMixin.id], foreign_keys=[creator_id], primaryjoin=lambda: Dbref.creator_id == remote(Dbref.id), post_update=True)
modifier_id = Column(Integer, ForeignKey("dbref.id"), nullable=False)
modifier = relationship("Player", remote_side=[CRUDMixin.id], foreign_keys=[modifier_id])
modifier_id = Column(Integer, ForeignKey("dbref.id"), nullable=True)
modifier = relationship("Player", remote_side=[CRUDMixin.id], foreign_keys=[modifier_id], primaryjoin=lambda: Dbref.modifier_id == remote(Dbref.id), post_update=True)
last_user_id = Column(Integer, ForeignKey("dbref.id"), nullable=False)
last_user = relationship("Player", remote_side=[CRUDMixin.id], foreign_keys=[last_user_id])
last_user_id = Column(Integer, ForeignKey("dbref.id"), nullable=True)
last_user = relationship("Player", remote_side=[CRUDMixin.id], foreign_keys=[last_user_id], primaryjoin=lambda: Dbref.last_user_id == remote(Dbref.id), post_update=True)
__mapper_args__ = {
"polymorphic_on": type,