34 lines
898 B
Python
34 lines
898 B
Python
from typing import TYPE_CHECKING
|
|
|
|
from sqlmodel import Field, Relationship, UniqueConstraint
|
|
|
|
from app.models.base import BaseModel
|
|
|
|
if TYPE_CHECKING:
|
|
from app.models.user import User
|
|
|
|
|
|
class UserOauth(BaseModel, table=True):
|
|
"""Database model for a user OAuth."""
|
|
|
|
__tablename__ = "user_oauth" # pyright: ignore[reportAssignmentType]
|
|
|
|
user_id: int = Field(foreign_key="user.id", nullable=False)
|
|
provider: str = Field(nullable=False)
|
|
provider_user_id: str = Field(nullable=False)
|
|
email: str = Field(nullable=False)
|
|
name: str = Field(nullable=False)
|
|
picture: str | None = Field(default=None)
|
|
|
|
# constraints
|
|
__table_args__ = (
|
|
UniqueConstraint(
|
|
"provider",
|
|
"provider_user_id",
|
|
name="uq_user_oauth_provider_user_id",
|
|
),
|
|
)
|
|
|
|
# relationships
|
|
user: "User" = Relationship(back_populates="oauths")
|