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
|
||||
|
||||
|
||||
def _enum_values(enum_class):
|
||||
"""Extract enum values for SQLAlchemy Enum column."""
|
||||
return [e.value for e in enum_class]
|
||||
|
||||
|
||||
class Conversation(Base, TimestampMixin):
|
||||
"""
|
||||
Represents a threaded conversation between participants.
|
||||
@@ -62,7 +67,7 @@ class Conversation(Base, TimestampMixin):
|
||||
|
||||
# Conversation type determines participant structure
|
||||
conversation_type = Column(
|
||||
Enum(ConversationType),
|
||||
Enum(ConversationType, values_callable=_enum_values),
|
||||
nullable=False,
|
||||
index=True,
|
||||
)
|
||||
@@ -82,7 +87,7 @@ class Conversation(Base, TimestampMixin):
|
||||
# Status flags
|
||||
is_closed = Column(Boolean, default=False, nullable=False)
|
||||
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)
|
||||
|
||||
# Last activity tracking for sorting
|
||||
@@ -135,7 +140,7 @@ class ConversationParticipant(Base, TimestampMixin):
|
||||
)
|
||||
|
||||
# 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)
|
||||
|
||||
# For vendor participants, track which vendor they represent
|
||||
@@ -196,7 +201,7 @@ class Message(Base, TimestampMixin):
|
||||
)
|
||||
|
||||
# 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)
|
||||
|
||||
# Message content
|
||||
@@ -208,7 +213,7 @@ class Message(Base, TimestampMixin):
|
||||
# Soft delete for moderation
|
||||
is_deleted = Column(Boolean, default=False, nullable=False)
|
||||
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)
|
||||
|
||||
# Relationships
|
||||
|
||||
Reference in New Issue
Block a user