|
|
|
"""Модель для данных."""
|
|
|
|
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:
|
|
|
|
"""Нужно ли удалить это сообщение.
|
|
|
|
|
|
|
|
Мы могли пропустить удаление из-за перезапуска.
|
|
|
|
"""
|
|
|
|
time_now = datetime.now()
|
|
|
|
if time_now > self.deletion_date:
|
|
|
|
return True
|
|
|
|
|
|
|
|
return False
|