fix: add values_callable to SQLAlchemy Enum columns
Add _enum_values helper and values_callable parameter to Enum columns in message models to ensure proper enum value extraction for database operations. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -48,6 +48,11 @@ class ParticipantType(str, enum.Enum):
|
|||||||
CUSTOMER = "customer" # Customer model
|
CUSTOMER = "customer" # Customer model
|
||||||
|
|
||||||
|
|
||||||
|
def _enum_values(enum_class):
|
||||||
|
"""Extract enum values for SQLAlchemy Enum column."""
|
||||||
|
return [e.value for e in enum_class]
|
||||||
|
|
||||||
|
|
||||||
class Conversation(Base, TimestampMixin):
|
class Conversation(Base, TimestampMixin):
|
||||||
"""
|
"""
|
||||||
Represents a threaded conversation between participants.
|
Represents a threaded conversation between participants.
|
||||||
@@ -62,7 +67,7 @@ class Conversation(Base, TimestampMixin):
|
|||||||
|
|
||||||
# Conversation type determines participant structure
|
# Conversation type determines participant structure
|
||||||
conversation_type = Column(
|
conversation_type = Column(
|
||||||
Enum(ConversationType),
|
Enum(ConversationType, values_callable=_enum_values),
|
||||||
nullable=False,
|
nullable=False,
|
||||||
index=True,
|
index=True,
|
||||||
)
|
)
|
||||||
@@ -82,7 +87,7 @@ class Conversation(Base, TimestampMixin):
|
|||||||
# Status flags
|
# Status flags
|
||||||
is_closed = Column(Boolean, default=False, nullable=False)
|
is_closed = Column(Boolean, default=False, nullable=False)
|
||||||
closed_at = Column(DateTime, nullable=True)
|
closed_at = Column(DateTime, nullable=True)
|
||||||
closed_by_type = Column(Enum(ParticipantType), nullable=True)
|
closed_by_type = Column(Enum(ParticipantType, values_callable=_enum_values), nullable=True)
|
||||||
closed_by_id = Column(Integer, nullable=True)
|
closed_by_id = Column(Integer, nullable=True)
|
||||||
|
|
||||||
# Last activity tracking for sorting
|
# Last activity tracking for sorting
|
||||||
@@ -135,7 +140,7 @@ class ConversationParticipant(Base, TimestampMixin):
|
|||||||
)
|
)
|
||||||
|
|
||||||
# Polymorphic participant reference
|
# Polymorphic participant reference
|
||||||
participant_type = Column(Enum(ParticipantType), nullable=False)
|
participant_type = Column(Enum(ParticipantType, values_callable=_enum_values), nullable=False)
|
||||||
participant_id = Column(Integer, nullable=False, index=True)
|
participant_id = Column(Integer, nullable=False, index=True)
|
||||||
|
|
||||||
# For vendor participants, track which vendor they represent
|
# For vendor participants, track which vendor they represent
|
||||||
@@ -196,7 +201,7 @@ class Message(Base, TimestampMixin):
|
|||||||
)
|
)
|
||||||
|
|
||||||
# Polymorphic sender reference
|
# Polymorphic sender reference
|
||||||
sender_type = Column(Enum(ParticipantType), nullable=False)
|
sender_type = Column(Enum(ParticipantType, values_callable=_enum_values), nullable=False)
|
||||||
sender_id = Column(Integer, nullable=False, index=True)
|
sender_id = Column(Integer, nullable=False, index=True)
|
||||||
|
|
||||||
# Message content
|
# Message content
|
||||||
@@ -208,7 +213,7 @@ class Message(Base, TimestampMixin):
|
|||||||
# Soft delete for moderation
|
# Soft delete for moderation
|
||||||
is_deleted = Column(Boolean, default=False, nullable=False)
|
is_deleted = Column(Boolean, default=False, nullable=False)
|
||||||
deleted_at = Column(DateTime, nullable=True)
|
deleted_at = Column(DateTime, nullable=True)
|
||||||
deleted_by_type = Column(Enum(ParticipantType), nullable=True)
|
deleted_by_type = Column(Enum(ParticipantType, values_callable=_enum_values), nullable=True)
|
||||||
deleted_by_id = Column(Integer, nullable=True)
|
deleted_by_id = Column(Integer, nullable=True)
|
||||||
|
|
||||||
# Relationships
|
# Relationships
|
||||||
|
|||||||
Reference in New Issue
Block a user