This commit is contained in:
2025-09-14 22:09:39 +05:00
parent 8ad2bfbe59
commit 3c418a97b4
30 changed files with 3404 additions and 0 deletions

145
database/example.py Normal file
View File

@@ -0,0 +1,145 @@
"""
Пример использования базы данных
"""
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🔒 Подключение к базе данных закрыто")