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.main_menu import user_menu_dialog
|
||||||
from quizzi.application.bot.user_dialogs.registration import registration_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.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.database.repo.user import UserRepository
|
||||||
from quizzi.infrastructure.di import DatabaseProvider, SchedulerProvider, ServiceProvider
|
from quizzi.infrastructure.di import DatabaseProvider, SchedulerProvider, ServiceProvider
|
||||||
from quizzi.infrastructure.utils.bot_commands import setup_bot_commands
|
from quizzi.infrastructure.utils.bot_commands import setup_bot_commands
|
||||||
from quizzi.infrastructure.utils.config import Config
|
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:
|
async def main() -> None:
|
||||||
logging.basicConfig(
|
logging.basicConfig(
|
||||||
level=logging.INFO,
|
level=logging.INFO,
|
||||||
@@ -79,6 +89,8 @@ async def main() -> None:
|
|||||||
user_repo = await request_container.get(UserRepository)
|
user_repo = await request_container.get(UserRepository)
|
||||||
await setup_bot_commands(bot, config, user_repo)
|
await setup_bot_commands(bot, config, user_repo)
|
||||||
|
|
||||||
|
await cleanup_tests_without_questions(container)
|
||||||
|
|
||||||
scheduler = await container.get(AsyncIOScheduler)
|
scheduler = await container.get(AsyncIOScheduler)
|
||||||
scheduler.start()
|
scheduler.start()
|
||||||
|
|
||||||
|
|||||||
@@ -206,3 +206,23 @@ class TestRepository:
|
|||||||
result = await self.session.execute(query)
|
result = await self.session.execute(query)
|
||||||
models = list(result.scalars().all())
|
models = list(result.scalars().all())
|
||||||
return [TestDTO(model).to_domain() for model in models]
|
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