Sarp Bilgiç
timezone fix migration
ae7bbe9
from sqlmodel import Field, SQLModel, Relationship
from datetime import datetime, timezone
from typing import Optional, List, TYPE_CHECKING
import uuid
from sqlalchemy import Text
from enum import Enum
if TYPE_CHECKING:
from src.api.models.user import User
def utc_now() -> datetime:
return datetime.now(timezone.utc).replace(tzinfo=None)
class ChatMessageRole(str, Enum):
USER = "user"
ASSISTANT = "assistant"
SYSTEM = "system"
class ChatSession(SQLModel, table=True):
__tablename__ = "chat_sessions"
id: Optional[uuid.UUID] = Field(default_factory=uuid.uuid4, primary_key=True)
title: str = Field(nullable=False)
user_id: Optional[int] = Field(default=None, foreign_key="users.id", nullable=True)
user: Optional["User"] = Relationship(back_populates="sessions")
messages: List["ChatMessage"] = Relationship(back_populates="session", cascade_delete=True)
is_active: bool = Field(default=True)
created_at: datetime = Field(default_factory=utc_now)
updated_at: datetime = Field(default_factory=utc_now)
class ChatMessage(SQLModel, table=True):
__tablename__ = "chat_messages"
id: Optional[int] = Field(default=None, primary_key=True)
content: str = Field(sa_type=Text)
role: ChatMessageRole = Field(index=True)
timestamp: datetime = Field(default_factory=utc_now)
session_id: uuid.UUID = Field(foreign_key="chat_sessions.id")
session: ChatSession = Relationship(back_populates="messages")