145 lines
5.6 KiB
Python
145 lines
5.6 KiB
Python
"""
|
||
Пример использования базы данных
|
||
"""
|
||
|
||
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🔒 Подключение к базе данных закрыто") |