generated from FOSS/Bot-Template
54 lines
2.2 KiB
Python
54 lines
2.2 KiB
Python
# - *- coding: utf- 8 - *-
|
|
from sqlalchemy import BigInteger, Integer
|
|
from sqlalchemy import update as sqlalchemy_update
|
|
from sqlalchemy.dialects.sqlite import insert
|
|
from sqlalchemy.orm import Mapped, mapped_column
|
|
|
|
from tgbot.database.core import Base, session_scope
|
|
from tgbot.database.repository import BaseRepository
|
|
from tgbot.utils.const_functions import get_unix
|
|
|
|
|
|
# Модель для хранения пользователей, которым бот отправил приветствие
|
|
# и которые ещё не вышли из очереди напоминаний
|
|
class PendingModel(Base):
|
|
__tablename__ = "storage_pending"
|
|
|
|
increment: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
|
user_id: Mapped[int] = mapped_column(BigInteger, nullable=False, unique=True, index=True)
|
|
joined_at: Mapped[int] = mapped_column(Integer, nullable=False, default=get_unix)
|
|
last_remind_at: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
|
|
|
|
|
|
ModelBase = PendingModel
|
|
BaseModel = PendingModel
|
|
|
|
|
|
# Репозиторий для управления очередью напоминаний
|
|
class PendingRepository(BaseRepository[PendingModel]):
|
|
def __init__(self):
|
|
super().__init__()
|
|
self.table_model = PendingModel
|
|
self.storage_name = PendingModel.__tablename__
|
|
|
|
# Добавляем пользователя в очередь, если его ещё нет
|
|
async def add(self, user_id: int) -> None:
|
|
statement = insert(PendingModel).values(
|
|
user_id=user_id,
|
|
joined_at=get_unix(),
|
|
last_remind_at=0,
|
|
)
|
|
statement = statement.on_conflict_do_nothing(index_elements=[PendingModel.user_id])
|
|
|
|
async with session_scope() as session:
|
|
await session.execute(statement)
|
|
|
|
# Обновляем время последнего напоминания
|
|
async def update_remind_at(self, user_id: int) -> None:
|
|
async with session_scope() as session:
|
|
await session.execute(
|
|
sqlalchemy_update(PendingModel)
|
|
.where(PendingModel.user_id == user_id)
|
|
.values(last_remind_at=get_unix())
|
|
)
|