/
DaniilSk
/
DesignLab
Обзор
Документация
Войти
/
DaniilSk
/
DesignLab
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
backend/app/models/user.py
40 строк
2 KB
Даниил
chore(repo): initialize Design Lab project
13 июл 2026, 01:14
13 июл 2026, 01:14
8b87f71
Код
Авторство
О чём код?
import uuid from datetime import datetime from sqlalchemy import DateTime, ForeignKey, Index, String, UniqueConstraint from sqlalchemy.dialects.postgresql import JSONB, UUID from sqlalchemy.orm import Mapped, mapped_column, relationship from app.models.base import Base, TimestampMixin, UUIDMixin class User(Base, UUIDMixin, TimestampMixin): __tablename__ = "users" name: Mapped[str] = mapped_column(String(160), nullable=False) email: Mapped[str | None] = mapped_column(String(320), unique=True) avatar_url: Mapped[str | None] = mapped_column(String(1000)) status: Mapped[str] = mapped_column(String(32), default="active", nullable=False) referral_code: Mapped[str] = mapped_column(String(24), unique=True, index=True, nullable=False) referred_by_user_id: Mapped[uuid.UUID | None] = mapped_column(UUID(as_uuid=True), ForeignKey("users.id", ondelete="SET NULL")) profile_settings: Mapped[dict] = mapped_column(JSONB, default=dict, nullable=False) last_login_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True)) referred_by: Mapped["User | None"] = relationship(remote_side="User.id", back_populates="invited_users") invited_users: Mapped[list["User"]] = relationship(back_populates="referred_by") external_accounts: Mapped[list["ExternalAccount"]] = relationship(back_populates="user", cascade="all, delete-orphan") class ExternalAccount(Base, UUIDMixin, TimestampMixin): __tablename__ = "external_accounts" __table_args__ = ( UniqueConstraint("provider", "provider_user_id", name="uq_external_provider_user"), Index("ix_external_accounts_user_provider", "user_id", "provider"), ) user_id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), ForeignKey("users.id", ondelete="CASCADE"), nullable=False) provider: Mapped[str] = mapped_column(String(32), nullable=False) provider_user_id: Mapped[str] = mapped_column(String(255), nullable=False) raw_profile: Mapped[dict] = mapped_column(JSONB, default=dict, nullable=False) user: Mapped[User] = relationship(back_populates="external_accounts")