MCP_todo / models /user.py
MAWB's picture
Update models/user.py
2920ce7 verified
"""
User model representing authenticated users managed by Better Auth.
Per @specs/001-auth-api-bridge/data-model.md
"""
from sqlmodel import SQLModel, Field, Relationship
from typing import TYPE_CHECKING, List
from datetime import datetime
from uuid import UUID, uuid4
if TYPE_CHECKING:
from models.task import TaskTable
from models.conversation import ConversationTable
class UserTable(SQLModel, table=True):
"""
User account managed by Better Auth.
The id field (UUID) MUST match the 'sub' claim in JWT tokens issued by Better Auth.
"""
__tablename__ = "users"
# Primary key - matches the 'sub' claim in JWT tokens
id: UUID = Field(
default_factory=uuid4,
primary_key=True,
index=True,
description="Unique user identifier that matches JWT 'sub' claim"
)
# User profile information
email: str = Field(
unique=True,
index=True,
max_length=255,
description="User's email address (unique)"
)
name: str | None = Field(
default=None,
max_length=255,
description="User's display name"
)
# Timestamps
created_at: datetime = Field(
default_factory=datetime.utcnow,
description="Timestamp when user account was created"
)
updated_at: datetime = Field(
default_factory=datetime.utcnow,
sa_column_kwargs={"onupdate": datetime.utcnow},
description="Timestamp when user record was last updated"
)
# Relationships
tasks: List["TaskTable"] = Relationship(
back_populates="user",
sa_relationship_kwargs={"cascade": "all, delete-orphan"}
)
conversations: List["ConversationTable"] = Relationship(
back_populates="user",
sa_relationship_kwargs={"cascade": "all, delete-orphan"}
)