import sqlite3 import logging from threading import Lock db_lock = Lock() # Инициализируем логгер logger = logging.getLogger(__name__) logger.setLevel(logging.DEBUG) # Устанавливаем уровень логирования class RegionAPI: def __init__(self, db_path): self.db_path = db_path def add_region(self, region_id: int, region_name: str): logger.info(f"Запрос на добавление региона: id={region_id}, name={region_name}") # Проверка валидности region_id if not str(region_id).isdigit(): logger.error(f"region_id {region_id} не является числом.") return {"status": "failure", "message": "Region_id must be digit only"} with db_lock, sqlite3.connect(self.db_path) as conn: cursor = conn.cursor() logger.debug(f"Проверка существования региона с id={region_id}") cursor.execute('SELECT COUNT(*) FROM regions WHERE region_id = ?', (region_id,)) count = cursor.fetchone()[0] if count == 0: # Добавляем новый регион cursor.execute('INSERT INTO regions (region_id, region_name, active) VALUES (?, ?, 1)', (region_id, region_name)) conn.commit() logger.info(f"Регион с id={region_id} успешно добавлен.") return {"status": "success", "message": "Region added successfully"} else: logger.warning(f"Регион с id={region_id} уже существует.") return {"status": "error", "message": "Region already exists"} def remove_region(self, region_id): logger.info(f"Запрос на удаление региона: id={region_id}") with db_lock, sqlite3.connect(self.db_path) as conn: cursor = conn.cursor() logger.debug(f"Проверка существования региона с id={region_id}") cursor.execute('SELECT COUNT(*) FROM regions WHERE region_id = ?', (region_id,)) count = cursor.fetchone()[0] if count == 0: logger.warning(f"Регион с id={region_id} не найден.") return {"status": "error", "message": "Region not found"} else: cursor.execute('DELETE FROM regions WHERE region_id = ?', (region_id,)) conn.commit() logger.info(f"Регион с id={region_id} успешно удалён.") return {"status": "success", "message": "Region removed successfully"} def get_regions(self): logger.info("Запрос на получение списка регионов.") with db_lock, sqlite3.connect(self.db_path) as conn: cursor = conn.cursor() logger.debug("Извлечение данных из таблицы regions.") cursor.execute('SELECT region_id, region_name, active FROM regions') regions = cursor.fetchall() logger.info(f"Получено {len(regions)} регионов.") return [{"region_id": r[0], "region_name": r[1], "regions_active": r[2]} for r in regions] def change_region_status(self, region_id, active): logger.info(f"Запрос на изменение статуса региона: id={region_id}, статус={active}") with db_lock, sqlite3.connect(self.db_path) as conn: cursor = conn.cursor() logger.debug(f"Проверка существования региона с id={region_id}") cursor.execute('SELECT COUNT(*) FROM regions WHERE region_id = ?', (region_id,)) count = cursor.fetchone()[0] if count == 0: logger.warning(f"Регион с id={region_id} не найден.") return {"status": "error", "message": "Region not found"} else: cursor.execute('UPDATE regions SET active = ? WHERE region_id = ?', (active, region_id)) conn.commit() logger.info(f"Статус региона с id={region_id} успешно изменён.") return {"status": "success", "message": "Region status updated successfully"} def update_region_status(self, region_id, active): logger.info(f"Запрос на обновление статуса региона: id={region_id}, активность={active}") with db_lock, sqlite3.connect(self.db_path) as conn: cursor = conn.cursor() # Проверяем существование региона logger.debug(f"Проверка существования региона с id={region_id}") cursor.execute("SELECT region_name FROM regions WHERE region_id = ?", (region_id,)) result = cursor.fetchone() if not result: logger.warning(f"Регион с id={region_id} не найден.") return {"status": "error", "message": "Регион не найден"} # Обновляем статус активности региона cursor.execute("UPDATE regions SET active = ? WHERE region_id = ?", (int(active), region_id)) conn.commit() action = "Активирован" if active else "Отключён" logger.info(f"Регион с id={region_id} {action}.") return {"status": "success", "message": f"Регион {region_id} {action}"}