""" Пример использования базы данных """ import os import sys from pathlib import Path # Добавляем путь к проекту в PYTHONPATH project_root = Path(__file__).parent.parent sys.path.insert(0, str(project_root)) from database.database import db, test_db_connection from database.services import db_service, setup_database import logging # Настройка логирования logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' ) logger = logging.getLogger(__name__) def main(): """Основная функция для демонстрации работы с базой данных""" print("🚀 Пример работы с PostgreSQL через SQLAlchemy") print("=" * 50) # 1. Тестирование подключения print("1. Тестирование подключения к базе данных...") if test_db_connection(): print("✅ Подключение успешно!") else: print("❌ Ошибка подключения!") return # 2. Настройка базы данных (создание таблиц) print("\n2. Настройка базы данных...") if setup_database(): print("✅ База данных настроена!") else: print("❌ Ошибка настройки базы данных!") return # 3. Работа с пользователями print("\n3. Работа с пользователями...") # Регистрация пользователя user, created = db_service.register_user( telegram_id=123456789, username="test_user", first_name="Иван", last_name="Иванов" ) print(f"Пользователь: {user.first_name} {user.last_name} (@{user.username})") print(f"Создан новый: {'Да' if created else 'Нет'}") # Повторная регистрация (должен вернуть существующего) user2, created2 = db_service.register_user( telegram_id=123456789, username="test_user_updated" ) print(f"Повторная регистрация - создан новый: {'Да' if created2 else 'Нет'}") # 4. Работа с сообщениями print("\n4. Работа с сообщениями...") # Сохранение сообщения message = db_service.save_message( telegram_message_id=1001, telegram_user_id=123456789, text="Привет! Это тестовое сообщение", message_type="text" ) print(f"Сообщение сохранено: ID {message.id if message else 'Ошибка'}") # Получение сообщений пользователя messages = db_service.get_user_messages(123456789, limit=10) print(f"Количество сообщений пользователя: {len(messages)}") # 5. Работа с настройками print("\n5. Работа с настройками...") # Установка настройки db_service.set_setting("welcome_message", "Добро пожаловать в бот!", "Приветственное сообщение") # Получение настройки welcome_msg = db_service.get_setting("welcome_message", "Привет!") print(f"Приветственное сообщение: {welcome_msg}") # 6. Статистика print("\n6. Статистика...") user_count = db_service.get_user_count() print(f"Всего пользователей: {user_count}") print("\n✅ Демонстрация завершена успешно!") def example_usage_in_telegram_bot(): """Пример использования в телеграм боте""" print("\n" + "=" * 50) print("📱 Пример использования в телеграм боте:") print("=" * 50) # Имитация обработки сообщения от пользователя telegram_user_id = 987654321 message_text = "Какая сегодня погода?" # 1. Регистрируем/получаем пользователя user, created = db_service.register_user( telegram_id=telegram_user_id, username="weather_user", first_name="Мария" ) if created: print(f"🆕 Новый пользователь: {user.first_name}") # Отправляем приветственное сообщение welcome_msg = db_service.get_setting("welcome_message", "Привет!") print(f"Отправляем: {welcome_msg}") # 2. Сохраняем сообщение message = db_service.save_message( telegram_message_id=2001, telegram_user_id=telegram_user_id, text=message_text ) print(f"💬 Сохранено сообщение: '{message_text[:30]}...'") # 3. Обновляем активность пользователя db_service.update_user_info(telegram_user_id, is_active=True) print("✅ Обработка сообщения завершена") if __name__ == "__main__": try: main() example_usage_in_telegram_bot() except Exception as e: logger.error(f"Ошибка в примере: {e}") print(f"❌ Ошибка: {e}") finally: # Закрываем подключение db.close() print("\n🔒 Подключение к базе данных закрыто")