Spaces:
Sleeping
Sleeping
from typing import List, Optional | |
from pydantic import BaseModel | |
from datetime import datetime | |
from sqlalchemy import Column, String, Integer, DateTime, JSON, ForeignKey | |
from sqlalchemy.orm import Mapped, relationship | |
from lpm_kernel.common.repository.database_session import Base | |
class Space(Base): | |
"""Space model, representing a multi-Upload chat room with a specific topic""" | |
__tablename__ = 'spaces' | |
id: Mapped[str] = Column(String, primary_key=True) # Space unique identifier | |
space_share_id: Mapped[Optional[str]] = Column(String, nullable=True) # Space share ID | |
title: Mapped[str] = Column(String, nullable=False) # discussion topic | |
objective: Mapped[str] = Column(String, nullable=False) # discussion objective | |
participants: Mapped[List[str]] = Column(JSON, nullable=False) # participants' endpoint list | |
host: Mapped[str] = Column(String, nullable=False) # host's endpoint | |
create_time: Mapped[datetime] = Column(DateTime, nullable=False) # discussion start time | |
status: Mapped[int] = Column(Integer, default=1) # discussion status: 1-discussion, 2-discussion ended | |
conclusion: Mapped[Optional[str]] = Column(String, nullable=True) # discussion conclusion | |
# relationship with SpaceMessage | |
messages = relationship("SpaceMessage", back_populates="space", cascade="all, delete-orphan") | |
class SpaceMessage(Base): | |
"""Space message model, database definition""" | |
__tablename__ = 'space_messages' | |
id: Mapped[str] = Column(String, primary_key=True) # message unique identifier | |
space_id: Mapped[str] = Column(String, ForeignKey('spaces.id'), nullable=False) # associated Space ID | |
sender_endpoint: Mapped[str] = Column(String, nullable=False) # sender's endpoint | |
content: Mapped[str] = Column(String, nullable=False) # message content | |
message_type: Mapped[str] = Column(String, nullable=False) # message type | |
round: Mapped[int] = Column(Integer, default=0) # message round | |
create_time: Mapped[datetime] = Column(DateTime, nullable=False) # message creation time | |
role: Mapped[str] = Column(String, default="participant") # message sender's role | |
# relationship with Space | |
space = relationship("Space", back_populates="messages") | |