generated from FOSS/Bot-Template
feat(admin): add admin panel and reminder system
This commit is contained in:
@@ -87,20 +87,46 @@ class BaseRepository(Generic[ModelTranslator]):
|
||||
)
|
||||
|
||||
|
||||
# Готовим подключение к БД. Сами миграции запускаются отдельно через migrate.py.
|
||||
# Готовим подключение к БД: создаём таблицы и накатываем недостающие колонки.
|
||||
async def prepare_database() -> None:
|
||||
database_path.parent.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
# Импортируем модели, чтобы репозитории работали с уже загруженными таблицами
|
||||
# Импортируем модели, чтобы Base.metadata знала обо всех таблицах
|
||||
import tgbot.database # noqa: F401
|
||||
|
||||
from tgbot.database.core import Base, engine
|
||||
from tgbot.database.db_settings import SettingsRepository
|
||||
|
||||
# Создаём все таблицы (если их ещё нет)
|
||||
async with engine.begin() as conn:
|
||||
await conn.run_sync(Base.metadata.create_all)
|
||||
|
||||
# Мягкая миграция: добавляем колонку remind_interval если её нет
|
||||
await _migrate_settings_columns()
|
||||
|
||||
try:
|
||||
await SettingsRepository().ensure_default()
|
||||
except SQLAlchemyError as error:
|
||||
raise RuntimeError(
|
||||
"База данных не готова. Запусти миграции командой: python migrate.py"
|
||||
"База данных не готова — проверь подключение к SQLite"
|
||||
) from error
|
||||
|
||||
bot_logger.info("База данных готова")
|
||||
|
||||
|
||||
async def _migrate_settings_columns() -> None:
|
||||
"""Добавляет новые колонки в storage_settings для существующих БД."""
|
||||
from sqlalchemy import text
|
||||
from tgbot.database.core import engine
|
||||
|
||||
migrations = [
|
||||
"ALTER TABLE storage_settings ADD COLUMN remind_interval INTEGER NOT NULL DEFAULT 0",
|
||||
]
|
||||
|
||||
async with engine.begin() as conn:
|
||||
for sql in migrations:
|
||||
try:
|
||||
await conn.execute(text(sql))
|
||||
except Exception:
|
||||
# Колонка уже существует — игнорируем
|
||||
pass
|
||||
|
||||
Reference in New Issue
Block a user