2 changed files with 87 additions and 63 deletions
@ -0,0 +1,66 @@
|
||||
"""Модель для данных.""" |
||||
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 |
Loading…
Reference in new issue