from sqlmodel import SQLModel, Field, Relationship from typing import Optional import uuid from datetime import datetime from sqlalchemy import Column, DateTime, Boolean, String, ForeignKey class RefreshToken(SQLModel, table=True): id: Optional[uuid.UUID] = Field(default_factory=uuid.uuid4, primary_key=True) # Use a plain sa_column without `index=True` (SQLModel does not allow index=True when sa_column is provided) token_hash: str = Field(sa_column=Column(String(length=128))) user_id: Optional[uuid.UUID] = Field(foreign_key="user.id") revoked: bool = Field(default=False, sa_column=Column(Boolean, default=False)) created_at: datetime = Field(sa_column=Column(DateTime, default=datetime.utcnow)) expires_at: datetime = Field(sa_column=Column(DateTime)) # Relationship back to user is optional and not required for our use-case