Spaces:
Running
Running
| """SQLModel ORM models for Supabase/PostgreSQL.""" | |
| from datetime import datetime | |
| from typing import Optional | |
| from sqlmodel import Field, SQLModel | |
| class User(SQLModel, table=True): | |
| __tablename__ = "users" | |
| id: Optional[int] = Field(default=None, primary_key=True) | |
| email: str = Field(index=True, sa_column_kwargs={"unique": True}) | |
| name: str | |
| password_hash: str | |
| is_active: bool = Field(default=True) | |
| created_at: datetime = Field(default_factory=datetime.utcnow, nullable=False) | |
| class UserSession(SQLModel, table=True): | |
| __tablename__ = "user_sessions" | |
| id: Optional[int] = Field(default=None, primary_key=True) | |
| user_id: int = Field(foreign_key="users.id") | |
| login_at: datetime = Field(default_factory=datetime.utcnow, nullable=False) | |
| logout_at: Optional[datetime] = Field(default=None) | |
| last_activity: datetime = Field(default_factory=datetime.utcnow, nullable=False) | |
| ip_address: Optional[str] = None | |
| user_agent: Optional[str] = None | |
| is_active: bool = Field(default=True) | |
| class Conversation(SQLModel, table=True): | |
| __tablename__ = "conversations" | |
| id: Optional[int] = Field(default=None, primary_key=True) | |
| user_id: int = Field(foreign_key="users.id", index=True) | |
| title: Optional[str] = None | |
| is_deleted: bool = Field(default=False, index=True) | |
| created_at: datetime = Field(default_factory=datetime.utcnow, nullable=False, index=True) | |
| last_message_at: datetime = Field(default_factory=datetime.utcnow, nullable=False, index=True) | |
| class Message(SQLModel, table=True): | |
| __tablename__ = "messages" | |
| id: Optional[int] = Field(default=None, primary_key=True) | |
| conversation_id: int = Field(foreign_key="conversations.id") | |
| sender_id: int = Field(foreign_key="users.id") | |
| content: str | |
| created_at: datetime = Field(default_factory=datetime.utcnow, nullable=False) | |