mirror of
https://github.com/koloideal/Quizzi.git
synced 2026-06-10 18:35:28 +03:00
update
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user