add migrations
This commit is contained in:
66
db.py
66
db.py
@@ -1,23 +1,64 @@
|
||||
import sqlite3
|
||||
import configparser
|
||||
import os
|
||||
import sys
|
||||
import custom_logger
|
||||
from datetime import datetime
|
||||
from loguru import logger
|
||||
from custom_logger import Logger
|
||||
|
||||
config_path = os.path.join(sys.path[0], 'settings.ini')
|
||||
db_logger = Logger(name='db')
|
||||
script_dir = os.path.dirname(os.path.abspath(__file__))
|
||||
config_path = os.path.join(script_dir, 'settings.ini')
|
||||
config = configparser.ConfigParser()
|
||||
config.read(config_path)
|
||||
LOGS = config.getboolean('Settings', 'logs')
|
||||
IMPORTANT_LOGS = config.get('Telegram', 'important_logs')
|
||||
|
||||
db_logger = custom_logger.Logger('database')
|
||||
|
||||
|
||||
class BotDB:
|
||||
|
||||
def __init__(self, db_file):
|
||||
def __init__(self):
|
||||
db_file_path = os.path.dirname(os.path.abspath(__file__))
|
||||
db_file = os.path.join(db_file_path, 'tg-bot-database')
|
||||
self.conn = sqlite3.connect(db_file, check_same_thread=False)
|
||||
self.cursor = self.conn.cursor()
|
||||
logger.info(f'Подключен к базе данных: {db_file_path}')
|
||||
|
||||
def create_table(self, sql_script):
|
||||
"""Создает таблицу в базе."""
|
||||
try:
|
||||
cursor = self.conn.cursor()
|
||||
cursor.execute(sql_script)
|
||||
except Exception as e:
|
||||
print(f"Ошибка при создании таблицы: {e}")
|
||||
|
||||
def get_current_version(self):
|
||||
"""Получает текущую версию миграций из таблицы migrations."""
|
||||
try:
|
||||
cursor = self.conn.cursor()
|
||||
cursor.execute("SELECT version FROM migrations ORDER BY version DESC LIMIT 1")
|
||||
version = cursor.fetchone()[0]
|
||||
return version
|
||||
except Exception as e:
|
||||
print(f"Ошибка при получении версии: {e}")
|
||||
return 0
|
||||
|
||||
def update_version(self, new_version, script_name):
|
||||
"""Обновляет версию миграций в таблице migrations."""
|
||||
logger.info(f'Попытка обновления версии: {new_version}, скрипт: {script_name}')
|
||||
try:
|
||||
current_date = datetime.now()
|
||||
today = current_date.strftime("%d-%m-%Y %H:%M:%S")
|
||||
cursor = self.conn.cursor()
|
||||
cursor.execute(
|
||||
"INSERT INTO migrations (version, script_name, created_at) VALUES(?, ?, ?)",
|
||||
(new_version, script_name, today),
|
||||
)
|
||||
self.conn.commit()
|
||||
logger.info(f"Версия обновлена: {new_version}, скрипт: {script_name}")
|
||||
except sqlite3.IntegrityError as e:
|
||||
logger.error(f"Ошибка при обновлении версии: {e}")
|
||||
except Exception as e:
|
||||
logger.error(f"Ошибка при обновлении версии: {e}")
|
||||
|
||||
# TODO: Deprecated, удалить
|
||||
def get_message_from_db(self, type: str, username):
|
||||
@@ -264,10 +305,10 @@ class BotDB:
|
||||
#TODO: Функция всегда возвращает true, даже если такого id нет в таблице
|
||||
self.cursor.execute("DELETE FROM blacklist WHERE user_id = ?", (user_id,))
|
||||
self.conn.commit()
|
||||
db_logger.info(f"User with ID {user_id} successfull delete.")
|
||||
logger.info(f"Пользователь с идентификатором {user_id} успешно удален.")
|
||||
return True
|
||||
except sqlite3.Error as error:
|
||||
db_logger.error(f"Error delete user with ID {user_id} from blacklist table: {str(error)}")
|
||||
logger.error(f"Ошибка удаления пользователя с идентификатором {user_id} из таблицы blacklist. Ошибка: {str(error)}")
|
||||
return False
|
||||
|
||||
def add_new_message_in_db(self, message_text, user_id, message_id, date, has_answer):
|
||||
@@ -302,14 +343,17 @@ class BotDB:
|
||||
result = self.cursor.fetchone()
|
||||
return bool(result)
|
||||
|
||||
def add_admin(self, user_id, username=None):
|
||||
def add_admin(self, user_id, role):
|
||||
"""
|
||||
Добавляет пользователя в список администраторов.
|
||||
Args:
|
||||
user_id: ID пользователя Telegram.
|
||||
username: Username пользователя (необязательно).
|
||||
role: Роль пользователя.
|
||||
Доступные варианты:
|
||||
1. creator - создатель
|
||||
2. admin - обычная роль
|
||||
"""
|
||||
self.cursor.execute("INSERT INTO admins (user_id, username) VALUES (?, ?)", (user_id, username))
|
||||
self.cursor.execute("INSERT INTO admins (user_id, role) VALUES (?, ?)", (user_id, role))
|
||||
return self.conn.commit()
|
||||
|
||||
def remove_admin(self, user_id):
|
||||
|
||||
Reference in New Issue
Block a user