/ fastapi-template-users / api / models / oauth_user_connection.py
oauth_user_connection.py
 1  from __future__ import annotations
 2  
 3  from typing import Any
 4  from uuid import uuid4
 5  
 6  from sqlalchemy import Column, ForeignKey, String, Text
 7  from sqlalchemy.orm import Mapped, relationship
 8  
 9  from .user import User
10  from ..database import Base, db
11  
12  
13  class OAuthUserConnection(Base):
14      __tablename__ = "oauth_user_connection"
15  
16      id: Mapped[str] = Column(String(36), primary_key=True, unique=True)
17      user_id: Mapped[str] = Column(String(36), ForeignKey("user.id"))
18      user: User = relationship("User", back_populates="oauth_connections")
19      provider_id: Mapped[str] = Column(String(64))
20      remote_user_id: Mapped[str] = Column(Text)
21      display_name: Mapped[str | None] = Column(Text, nullable=True)
22  
23      @property
24      def serialize(self) -> dict[str, Any]:
25          return {"id": self.id, "provider_id": self.provider_id, "display_name": self.display_name}
26  
27      @staticmethod
28      async def create(
29          user_id: str, provider_id: str, remote_user_id: str, display_name: str | None
30      ) -> OAuthUserConnection:
31          row = OAuthUserConnection(
32              id=str(uuid4()),
33              user_id=user_id,
34              provider_id=provider_id,
35              remote_user_id=remote_user_id,
36              display_name=display_name,
37          )
38          await db.add(row)
39          return row