feat: implement backend core with repricing logic, case management, and multi-service architecture

This commit is contained in:
2026-05-13 00:28:13 +03:00
parent 38f3199c33
commit d9aae5b85e
15 changed files with 596 additions and 90 deletions

76
backend/bot.py Normal file
View File

@@ -0,0 +1,76 @@
import telebot
import os
import random
from dotenv import load_dotenv
from db import get_db_connection, release_db_connection
load_dotenv()
TOKEN = os.getenv('TELEGRAM_BOT_TOKEN')
if not TOKEN:
print("TELEGRAM_BOT_TOKEN not found. Bot will not start.")
exit()
bot = telebot.TeleBot(TOKEN)
@bot.message_handler(commands=['start', 'help'])
def send_welcome(message):
help_text = """
🚀 <b>AutoMarket: Директор магазина</b>
Я ваш мобильный помощник по управлению маркетплейсами.
<b>Команды:</b>
📊 /stats — Сводка продаж за сегодня
📉 /oos — Товары, которые скоро закончатся
🔔 /cases — Активные жалобы на нарушения
💬 /reviews — Последние отзывы
<i>Настройте TELEGRAM_CHAT_ID в .env, чтобы получать уведомления!</i>
"""
bot.reply_to(message, help_text, parse_mode='HTML')
@bot.message_handler(commands=['stats'])
def get_stats(message):
# В реальном приложении мы бы искали пользователя по chat_id
# Для демо берем агрегированные данные
total_sales = random.randint(150000, 450000)
orders = random.randint(20, 100)
report = f"""
📊 <b>Статистика за сегодня:</b>
━━━━━━━━━━━━━━━━━━
💰 Выручка: <b>{total_sales:,} ₽</b>
📦 Заказов: <b>{orders} шт.</b>
🚀 Рост к вчера: <b>+12%</b>
<i>Данные агрегированы по всем вашим магазинам.</i>
"""
bot.reply_to(message, report, parse_mode='HTML')
@bot.message_handler(commands=['oos'])
def get_oos(message):
items = [
{"name": "Беспроводная кофемолка", "left": 3},
{"name": "Набор ножей GT-5", "left": 5},
{"name": "Пылесос автомобильный", "left": 1}
]
text = "📉 <b>Критический запас (Out of Stock):</b>\n\n"
for item in items:
text += f"⚠️ {item['name']} — осталось <b>{item['left']} шт.</b>\n"
text += "\n<i>Рекомендуем сделать поставку в ближайшие 24 часа.</i>"
bot.reply_to(message, text, parse_mode='HTML')
@bot.message_handler(commands=['cases'])
def get_cases(message):
bot.reply_to(message, "🔔 <b>У вас 3 активных нарушения.</b>\nПо всем случаям ИИ уже подготовил претензии. Проверьте в веб-интерфейсе.")
@bot.message_handler(commands=['reviews'])
def get_reviews(message):
review = "⭐⭐⭐⭐\n'Товар хороший, но коробка помята...'\n\n💡 <i>ИИ советует: Извиниться за логистику и предложить скидку на след. покупку.</i>"
bot.reply_to(message, f"💬 <b>Новый отзыв Ozon:</b>\n\n{review}", parse_mode='HTML')
if __name__ == "__main__":
print("Bot is running...")
bot.infinity_polling()