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