File size: 1,146 Bytes
71e71e8 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | import datetime
from peewee import *
from src.model.BaseModel import BaseModel
from src.model.GroupChat import GroupChat
class GroupChatAutoDelete(BaseModel):
"""
Group Chat Auto Delete class
"""
group_chat: GroupChat | ForeignKeyField = ForeignKeyField(
GroupChat, backref="auto_delete", on_delete="CASCADE"
)
message_id: int | IntegerField = IntegerField()
delete_date: datetime.datetime | DateTimeField = DateTimeField()
class Meta:
db_table = "group_chat_auto_delete"
GroupChatAutoDelete.create_table()
# Auto-migrate: index delete_date. This column is queried every minute by auto_delete()
# (WHERE delete_date < NOW() ... LIMIT 20) with no index, forcing a full table scan on every
# single run, 24/7 - a steady, avoidable cost on a usage-billed database.
try:
from playhouse.migrate import MySQLMigrator, migrate as pw_migrate
from src.model.BaseModel import db_obj
_migrator = MySQLMigrator(db_obj.get_db())
pw_migrate(
_migrator.add_index("group_chat_auto_delete", ("delete_date",), unique=False),
)
except Exception:
pass # Index already exists
|