40 lines
1.2 KiB
Python
40 lines
1.2 KiB
Python
from __future__ import annotations
|
|
|
|
from datetime import datetime
|
|
|
|
from sqlmodel import Field, Relationship, SQLModel
|
|
|
|
from app.db.base import TimestampMixin
|
|
|
|
|
|
class RefreshToken(TimestampMixin, SQLModel, table=True):
|
|
__tablename__ = "refresh_tokens"
|
|
|
|
id: int | None = Field(default=None, primary_key=True)
|
|
user_id: int = Field(foreign_key="users.id", index=True)
|
|
token: str = Field(max_length=500, unique=True, index=True)
|
|
expires_at: datetime
|
|
is_revoked: bool = Field(default=False)
|
|
device_info: str = Field(default="", max_length=255)
|
|
|
|
# Relationships
|
|
user: User | None = Relationship(back_populates="refresh_tokens")
|
|
|
|
|
|
class OAuthAccount(TimestampMixin, SQLModel, table=True):
|
|
__tablename__ = "oauth_accounts"
|
|
|
|
id: int | None = Field(default=None, primary_key=True)
|
|
user_id: int = Field(foreign_key="users.id", index=True)
|
|
provider: str = Field(max_length=50)
|
|
provider_user_id: str = Field(max_length=255)
|
|
access_token: str = Field(default="", max_length=500)
|
|
refresh_token: str = Field(default="", max_length=500)
|
|
expires_at: datetime | None = Field(default=None)
|
|
|
|
|
|
# Avoid circular import
|
|
from app.models.mariadb.user import User # noqa: E402, F811
|
|
|
|
RefreshToken.model_rebuild()
|