From f1d3f6fbe4b78bf0489c01504377a2614de80820 Mon Sep 17 00:00:00 2001 From: kolo Date: Tue, 20 Jan 2026 08:56:01 +0300 Subject: [PATCH] update --- ADMIN_GUIDE.txt | 0 src/quizzi/application/__main__.py | 12 +++++++++++ .../infrastructure/database/repo/test.py | 20 +++++++++++++++++++ 3 files changed, 32 insertions(+) create mode 100644 ADMIN_GUIDE.txt diff --git a/ADMIN_GUIDE.txt b/ADMIN_GUIDE.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/quizzi/application/__main__.py b/src/quizzi/application/__main__.py index 1b810b6..92d2328 100644 --- a/src/quizzi/application/__main__.py +++ b/src/quizzi/application/__main__.py @@ -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() diff --git a/src/quizzi/infrastructure/database/repo/test.py b/src/quizzi/infrastructure/database/repo/test.py index 102904b..e95a434 100644 --- a/src/quizzi/infrastructure/database/repo/test.py +++ b/src/quizzi/infrastructure/database/repo/test.py @@ -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)