✅ Регистрация и верификация жильцов ✅ Рейтинг активности (уровни) ✅ Детект шпионов (Score 0-100) ✅ Анти-мат система (3 предупреждения → бан) ✅ Админ-панель с рассылкой ✅ Учёт квартир (несколько жильцов) ✅ Телефоны экстренных служб и мастеров ✅ Еженедельный экспорт JSON ✅ Прокси (socks5) для обхода РКН Бекап: backups/versions/v1.0_mvp_2026-02-26/ Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
68 lines
2.8 KiB
Python
68 lines
2.8 KiB
Python
"""
|
||
Миграция v1.14: создать таблицы events и event_participants для календаря событий
|
||
"""
|
||
import sqlite3
|
||
import asyncio
|
||
|
||
DB_PATH = 'database/domovoy.db'
|
||
|
||
|
||
async def migrate():
|
||
"""Создать таблицы events и event_participants"""
|
||
conn = sqlite3.connect(DB_PATH)
|
||
cursor = conn.cursor()
|
||
|
||
# Проверяем таблицу events
|
||
cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='events'")
|
||
if not cursor.fetchone():
|
||
print("➕ Создаём таблицу events...")
|
||
cursor.execute("""
|
||
CREATE TABLE events (
|
||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
title TEXT NOT NULL,
|
||
description TEXT,
|
||
event_type TEXT DEFAULT 'general',
|
||
event_date TIMESTAMP NOT NULL,
|
||
location TEXT,
|
||
created_by BIGINT,
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
is_active BOOLEAN DEFAULT 1,
|
||
reminder_sent BOOLEAN DEFAULT 0,
|
||
FOREIGN KEY (created_by) REFERENCES users(user_id)
|
||
)
|
||
""")
|
||
cursor.execute("CREATE INDEX ix_events_date ON events(event_date)")
|
||
cursor.execute("CREATE INDEX ix_events_type ON events(event_type)")
|
||
cursor.execute("CREATE INDEX ix_events_active ON events(is_active)")
|
||
print("✅ Таблица events создана")
|
||
else:
|
||
print("ℹ️ Таблица events уже существует")
|
||
|
||
# Проверяем таблицу event_participants
|
||
cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='event_participants'")
|
||
if not cursor.fetchone():
|
||
print("➕ Создаём таблицу event_participants...")
|
||
cursor.execute("""
|
||
CREATE TABLE event_participants (
|
||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
event_id INTEGER NOT NULL,
|
||
user_id BIGINT NOT NULL,
|
||
joined_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
FOREIGN KEY (event_id) REFERENCES events(id),
|
||
FOREIGN KEY (user_id) REFERENCES users(user_id)
|
||
)
|
||
""")
|
||
cursor.execute("CREATE INDEX ix_event_participants_event ON event_participants(event_id)")
|
||
cursor.execute("CREATE INDEX ix_event_participants_user ON event_participants(user_id)")
|
||
cursor.execute("CREATE UNIQUE INDEX ix_event_participants_unique ON event_participants(event_id, user_id)")
|
||
print("✅ Таблица event_participants создана")
|
||
else:
|
||
print("ℹ️ Таблица event_participants уже существует")
|
||
|
||
conn.commit()
|
||
conn.close()
|
||
print("✅ Миграция v1.14 завершена!")
|
||
|
||
|
||
if __name__ == '__main__':
|
||
asyncio.run(migrate())
|