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") | |