Чистка хвостов веб-формы: убраны web_registrations и строка «с сайта» в стате

- database.py: удалены таблица web_registrations, методы add_web_registration и
  next_web_registration_id, поле from_web из get_lead_stats (форму убрали).
- bot.py: из статистики убрана строка «с сайта» (веб-заявки больше не пишутся).

pytest 33 passed.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Kenik
2026-07-23 20:23:36 +03:00
parent 196a488560
commit 72eeccdc3a
2 changed files with 2 additions and 54 deletions
+2 -3
View File
@@ -1428,8 +1428,7 @@ class VKBotApplication:
"🗂 Заявки (всего): {total}\n"
" • сегодня: {today}\n"
" • за 7 дней: {last7}\n"
" • из бота: {from_bot}\n"
"с сайта: {from_web}\n\n"
" • из бота: {from_bot}\n\n"
"📨 Согласны на рассылку: {mk_yes} из {total} ({mk_pct}%)\n\n"
"🎮 По направлениям:\n{services}\n"
"💬 Диалоги:\n"
@@ -1437,7 +1436,7 @@ class VKBotApplication:
" • сообщений от клиентов: {umsg}"
).format(
total=total, today=ls["today"], last7=ls["last7"],
from_bot=ls["from_bot"], from_web=ls["from_web"],
from_bot=ls["from_bot"],
mk_yes=ls["marketing_yes"], mk_pct=marketing_pct,
services=service_lines, uniq=ds["unique_users"], umsg=ds["user_messages"]
)
-51
View File
@@ -174,21 +174,6 @@ class DatabaseManager:
)
""")
# Table for web registrations
cursor.execute("""
CREATE TABLE IF NOT EXISTS web_registrations (
id TEXT PRIMARY KEY,
name TEXT,
phone TEXT,
email TEXT,
vk_link TEXT,
agree_oferta INTEGER,
agree_policy INTEGER,
agree_newsletter INTEGER,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
""")
# Table for editable bot links (переопределяют дефолты из config/.env)
cursor.execute("""
CREATE TABLE IF NOT EXISTS bot_links (
@@ -389,21 +374,6 @@ class DatabaseManager:
)
conn.commit()
def next_web_registration_id(self) -> str:
"""Следующий ID веб-заявки вида id_004 по МАКСИМАЛЬНОМУ существующему номеру.
Считаем по max(числовой суффикс), а не по COUNT: при удалении записей
COUNT+1 может совпасть с существующим id и нарушить PRIMARY KEY.
"""
with self._get_connection() as conn:
cursor = conn.cursor()
# substr(id, 4) отрезает префикс 'id_' и приводит к числу
cursor.execute(
"SELECT COALESCE(MAX(CAST(substr(id, 4) AS INTEGER)), 0) FROM web_registrations "
"WHERE id LIKE 'id\\_%' ESCAPE '\\'"
)
return f"id_{cursor.fetchone()[0] + 1:03d}"
def add_lead(self, user_id: int, source: str, name: str, phone: str,
service: Optional[str] = None, call_time: Optional[str] = None,
promo: Optional[str] = None, marketing: bool = False):
@@ -438,7 +408,6 @@ class DatabaseManager:
"today": scalar("SELECT COUNT(*) FROM leads WHERE date(created_at) = date('now', 'localtime')"),
"last7": scalar("SELECT COUNT(*) FROM leads WHERE created_at >= datetime('now', '-7 days')"),
"from_bot": scalar("SELECT COUNT(*) FROM leads WHERE source = 'bot'"),
"from_web": scalar("SELECT COUNT(*) FROM leads WHERE source = 'web'"),
"marketing_yes": scalar("SELECT COUNT(*) FROM leads WHERE marketing = 1"),
}
@@ -672,23 +641,3 @@ class DatabaseManager:
stats["by_position"] = cursor.fetchall()
return stats
def add_web_registration(self, reg_id: str, data: dict):
"""Сохранить заявку с веб-формы в базу данных SQLite."""
with self._get_connection() as conn:
cursor = conn.cursor()
cursor.execute("""
INSERT INTO web_registrations (
id, name, phone, email, vk_link,
agree_oferta, agree_policy, agree_newsletter
) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
""", (
reg_id,
data.get("name", "").strip(),
data.get("phone", "").strip(),
data.get("email", "").strip(),
data.get("vk", "").strip(),
1 if data.get("agreeOferta") else 0,
1 if data.get("agreePolicy") else 0,
1 if data.get("agreeNewsletter") else 0
))
conn.commit()