38 lines
1.5 KiB
Python
38 lines
1.5 KiB
Python
from sqlalchemy import Column, DateTime, Integer, String
|
|
from sqlalchemy.orm import relationship
|
|
|
|
from app.core.db import Base, utc_now
|
|
|
|
|
|
class User(Base):
|
|
__tablename__ = "users"
|
|
|
|
id = Column(String, primary_key=True)
|
|
phone = Column(String, unique=True, nullable=False, index=True)
|
|
password_hash = Column(String, nullable=False)
|
|
email = Column(String, unique=True, nullable=True)
|
|
openid = Column(String, unique=True, nullable=True)
|
|
nickname = Column(String, nullable=False)
|
|
avatar_url = Column(String, nullable=True)
|
|
subscription_type = Column(String, default="free")
|
|
subscription_expires_at = Column(DateTime(timezone=True), nullable=True)
|
|
created_at = Column(DateTime(timezone=True), default=utc_now)
|
|
birth_year = Column(Integer, nullable=True)
|
|
birth_place = Column(String, nullable=True)
|
|
grew_up_place = Column(String, nullable=True)
|
|
occupation = Column(String, nullable=True)
|
|
|
|
conversations = relationship("Conversation", back_populates="user")
|
|
chapters = relationship("Chapter", back_populates="user")
|
|
books = relationship("Book", back_populates="user")
|
|
orders = relationship("Order", back_populates="user", cascade="all, delete-orphan")
|
|
memoir_state = relationship(
|
|
"MemoirState",
|
|
back_populates="user",
|
|
uselist=False,
|
|
cascade="all, delete-orphan",
|
|
)
|
|
refresh_tokens = relationship(
|
|
"RefreshToken", back_populates="user", cascade="all, delete-orphan"
|
|
)
|