/
outthevoid
/
python_microblogging_service_project
Обзор
Документация
Войти
/
outthevoid
/
python_microblogging_service_project
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
app/models/user_model.py
80 строк
3 KB
VladimirChukavin
Revert "Вернул проект в исходное состояние."
07 апр 2026, 14:01
07 апр 2026, 14:01
7531b60
Код
Авторство
О чём код?
from typing import TYPE_CHECKING, List from sqlalchemy import Column, ForeignKey, String, Table from sqlalchemy.orm import Mapped, mapped_column, relationship from app.database.base import Base if TYPE_CHECKING: from app.models.like_model import Like from app.models.tweet_model import Tweet followers_table = Table( "followers", Base.metadata, Column("follower_id", ForeignKey("users.id"), primary_key=True), Column("following_id", ForeignKey("users.id"), primary_key=True), ) class User(Base): """ ORM-модель пользователя. Класс представляет пользователя системы, включая его имя, API-ключ, опубликованные твиты, поставленные лайки и связи подписчиков/подписок. :ivar id: Уникальный идентификатор пользователя. :vartype id: int :ivar name: Имя пользователя. :vartype name: str :ivar api_key: Уникальный API-ключ пользователя. :vartype api_key: str :ivar tweets: Список твитов, опубликованных пользователем. :vartype tweets: list[app.models.tweet_model.Tweet] :ivar likes: Список лайков, поставленных пользователем. :vartype likes: list[app.models.like_model.Like] :ivar followers: Список пользователей, которые подписаны на данного пользователя. :vartype followers: list[User] :ivar following: Список пользователей, на которых подписан данный пользователь. :vartype following: list[User] """ __tablename__ = "users" id: Mapped[int] = mapped_column(primary_key=True) name: Mapped[str] = mapped_column(String(50), nullable=False, index=True) api_key: Mapped[str] = mapped_column(String(50), unique=True, nullable=False) tweets: Mapped[List["Tweet"]] = relationship( "Tweet", back_populates="user", cascade="all, delete-orphan" ) likes: Mapped[List["Like"]] = relationship( "Like", back_populates="user", cascade="all, delete-orphan" ) followers: Mapped[List["User"]] = relationship( "User", back_populates="following", secondary=followers_table, primaryjoin=id == followers_table.c.following_id, secondaryjoin=id == followers_table.c.follower_id, lazy="raise", ) following: Mapped[List["User"]] = relationship( "User", back_populates="followers", secondary=followers_table, primaryjoin=id == followers_table.c.follower_id, secondaryjoin=id == followers_table.c.following_id, lazy="raise", ) def __repr__(self): """ Возвращает строковое представление пользователя. :returns: Строка с идентификатором и именем пользователя. :rtype: str """ return f"User(id={self.id}, name={self.name})"