@AlexMine
Учусь

Как при запросе пользователя, вывести его последний онлайн?

Добрый день, есть две таблицы, одна с пользователями, другая куда пишется последнее обращение к сервису. Есть следующие модели:
class Base(AsyncAttrs, DeclarativeBase):
    pass

class TimestampMixin(object):
    created_at: Mapped[datetime] = mapped_column(
        insert_default=datetime.utcnow
    )
    updated_at: Mapped[datetime] = mapped_column(
        default=datetime.utcnow,
        onupdate=datetime.utcnow
    )


class User(Base, TimestampMixin):
    __tablename__ = 'users'

    id: Mapped[UUID] = mapped_column(UUID(as_uuid=True), primary_key=True,
                                     default=uuid.uuid4)
    login: Mapped[str] = mapped_column(unique=True)
    name: Mapped[str] = mapped_column(String(15))
    onlines: Mapped[List["UserOnline"]] = relationship(
        cascade="all, delete-orphan"
    )

    def __str__(self) -> str:
        return f"id: {self.id}\n"

class UserOnline(Base, TimestampMixin):
    __tablename__ = "users_onlines"

    id: Mapped[int] = mapped_column(BigInteger, primary_key=True)
    user_id: Mapped[int] = mapped_column(ForeignKey("users.id"))
    user: Mapped["User"] = relationship(back_populates="onlines")


Могу ли я, создать у класса User поле, которое при выполнение select, будет считать последний онлайн пользователя? Чтобы я мог к нему обратиться по типу last_online = user.last_online
  • Вопрос задан
  • 112 просмотров
Решения вопроса 1
@pyHammer
Правильным будет сделать так, вам нужно view который принимает post (или get не сильно принципиально) запрос, можно без тела запроса. В логике view определите функцию которая будет обновлять необходимое вам поле. На стороне браузера реализуйте функцию которая раз в 5 секунд отправляет post запрос на данную view. таким образом вы сможете точно знать пользователь онлайн или нет.

Реализация через SQL возможна, но пользователь может быть на сайте но не совершать никаких действий, в таком случае реализация через SQL не будет давать ожидаемого результата.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
07 мая 2024, в 19:34
10000 руб./за проект
07 мая 2024, в 18:48
5000 руб./за проект
07 мая 2024, в 18:23
20000 руб./за проект