"""Модель для данных.""" from sqlalchemy import Column, Integer, String, DateTime, UniqueConstraint from sqlalchemy.orm import declarative_base from datetime import datetime Base = declarative_base() class Allowed_user(Base): """Белый список пользователей. При добавлении в базу user_id проверяется на уникальность (в базе), чтобы избежать повторов. """ __tablename__ = "allowed_users" id = Column(Integer, primary_key=True) user_id = Column(Integer, nullable=False) date_add = Column(DateTime, nullable=False) __table_args__ = (UniqueConstraint("user_id", name="unique_uid"),) class Token(Base): """Класс для токенов. Хранит сам ключ, и дату истечения. """ __tablename__ = "tokens" id = Column(Integer, primary_key=True) token = Column(String, nullable=False) expire = Column(DateTime, nullable=False) def expired(self) -> bool: """Проверка срока жизни токена. Вовзращает истину, если срок действия токена истек. """ if datetime.now() > self.expire: return True return False def __repr__(self): """Базовое представление класса.""" return f"{self.id}: {self.token} | {self.expire}" class Messages_to_delete(Base): """Сообщения, которые нужно будет удалить.""" __tablename__ = "messages_to_delete" id = Column(Integer, primary_key=True) message_id = Column(Integer, nullable=False) deletion_date = Column(DateTime, nullable=False) def deletion_needed(self) -> bool: """Нужно ли удалить это сообщение. Мы могли пропустить удаление из-за перезапуска. """ if datetime.now() > self.deletion_date: return True return False