This commit is contained in:
2026-01-20 08:56:01 +03:00
parent ca6684b0cf
commit f1d3f6fbe4
3 changed files with 32 additions and 0 deletions
View File
+12
View File
@@ -25,12 +25,22 @@ from quizzi.application.bot.user_dialogs.deeplink import deeplink_dialog
from quizzi.application.bot.user_dialogs.main_menu import user_menu_dialog
from quizzi.application.bot.user_dialogs.registration import registration_dialog
from quizzi.application.bot.user_dialogs.take_test import take_test_dialog
from quizzi.infrastructure.database.repo.test import TestRepository
from quizzi.infrastructure.database.repo.user import UserRepository
from quizzi.infrastructure.di import DatabaseProvider, SchedulerProvider, ServiceProvider
from quizzi.infrastructure.utils.bot_commands import setup_bot_commands
from quizzi.infrastructure.utils.config import Config
async def cleanup_tests_without_questions(container) -> None:
"""Удаляет тесты без вопросов при старте бота"""
async with container() as request_container:
test_repo = await request_container.get(TestRepository)
deleted_count = await test_repo.delete_tests_without_questions()
if deleted_count > 0:
logging.info(f"Удалено тестов без вопросов: {deleted_count}")
async def main() -> None:
logging.basicConfig(
level=logging.INFO,
@@ -79,6 +89,8 @@ async def main() -> None:
user_repo = await request_container.get(UserRepository)
await setup_bot_commands(bot, config, user_repo)
await cleanup_tests_without_questions(container)
scheduler = await container.get(AsyncIOScheduler)
scheduler.start()
@@ -206,3 +206,23 @@ class TestRepository:
result = await self.session.execute(query)
models = list(result.scalars().all())
return [TestDTO(model).to_domain() for model in models]
async def delete_tests_without_questions(self) -> int:
"""Удаляет тесты без вопросов и возвращает количество удалённых тестов"""
subquery = (
select(QuestionModel.test_id)
.group_by(QuestionModel.test_id)
.subquery()
)
result = await self.session.execute(
select(TestModel)
.where(TestModel.id.notin_(select(subquery)))
)
tests_to_delete = list(result.scalars().all())
for test in tests_to_delete:
await self.session.delete(test)
await self.session.flush()
return len(tests_to_delete)