Spaces:
Running
Running
File size: 1,866 Bytes
a8a2cf5 8c77cd6 a8a2cf5 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
"""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)
|