| from sqlmodel import Field, SQLModel, Relationship |
| from typing import Optional, List, TYPE_CHECKING |
| from datetime import datetime |
|
|
| if TYPE_CHECKING: |
| from .user import User |
| from .message import Message |
|
|
|
|
| class Conversation(SQLModel, table=True): |
| """Conversation model representing a chat session between a user and the AI agent.""" |
|
|
| __tablename__ = "conversations" |
|
|
| id: Optional[int] = Field(default=None, primary_key=True) |
| user_id: int = Field(foreign_key="users.id", index=True) |
| title: Optional[str] = Field(default=None, max_length=200) |
| created_at: datetime = Field(default_factory=datetime.utcnow, index=True) |
| updated_at: datetime = Field(default_factory=datetime.utcnow, index=True) |
| deleted_at: Optional[datetime] = Field(default=None, index=True) |
|
|
| |
| owner: "User" = Relationship(back_populates="conversations") |
| messages: List["Message"] = Relationship( |
| back_populates="conversation", |
| cascade_delete=True, |
| sa_relationship_kwargs={"order_by": "Message.created_at"} |
| ) |
|
|