✅ Регистрация и верификация жильцов ✅ Рейтинг активности (уровни) ✅ Детект шпионов (Score 0-100) ✅ Анти-мат система (3 предупреждения → бан) ✅ Админ-панель с рассылкой ✅ Учёт квартир (несколько жильцов) ✅ Телефоны экстренных служб и мастеров ✅ Еженедельный экспорт JSON ✅ Прокси (socks5) для обхода РКН Бекап: backups/versions/v1.0_mvp_2026-02-26/ Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
57 lines
1.9 KiB
Python
57 lines
1.9 KiB
Python
"""
|
||
Миграция: добавить поля rating и level в таблицу users
|
||
"""
|
||
import sqlite3
|
||
import asyncio
|
||
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession
|
||
from sqlalchemy import text
|
||
|
||
DB_PATH = 'database/domovoy.db'
|
||
DB_URL = f'sqlite+aiosqlite:///{DB_PATH}'
|
||
|
||
|
||
async def migrate():
|
||
"""Добавить поля rating и level"""
|
||
conn = sqlite3.connect(DB_PATH)
|
||
cursor = conn.cursor()
|
||
|
||
# Проверяем, есть ли уже поле rating
|
||
cursor.execute("PRAGMA table_info(users)")
|
||
columns = [col[1] for col in cursor.fetchall()]
|
||
|
||
if 'rating' not in columns:
|
||
print("➕ Добавляем поле rating...")
|
||
cursor.execute("ALTER TABLE users ADD COLUMN rating INTEGER DEFAULT 0")
|
||
print("✅ Поле rating добавлено")
|
||
else:
|
||
print("ℹ️ Поле rating уже существует")
|
||
|
||
if 'level' not in columns:
|
||
print("➕ Добавляем поле level...")
|
||
cursor.execute("ALTER TABLE users ADD COLUMN level TEXT DEFAULT 'Новичок'")
|
||
print("✅ Поле level добавлено")
|
||
else:
|
||
print("ℹ️ Поле level уже существует")
|
||
|
||
# Обновляем уровни у существующих пользователей
|
||
print("🔄 Обновляем уровни пользователей...")
|
||
cursor.execute("""
|
||
UPDATE users
|
||
SET level = CASE
|
||
WHEN rating >= 1000 THEN 'Лидер'
|
||
WHEN rating >= 500 THEN 'Активист'
|
||
WHEN rating >= 100 THEN 'Сосед'
|
||
ELSE 'Новичок'
|
||
END
|
||
WHERE level IS NULL OR level = 'Новичок'
|
||
""")
|
||
updated = cursor.rowcount
|
||
print(f"✅ Обновлено {updated} записей")
|
||
|
||
conn.commit()
|
||
conn.close()
|
||
print("✅ Миграция завершена!")
|
||
|
||
|
||
if __name__ == '__main__':
|
||
asyncio.run(migrate())
|