Kaynağa Gözat

refactor: delegate user management from MessageRouter to bot routers

Librellium 3 hafta önce
ebeveyn
işleme
fec92fe66c

+ 15 - 6
anonflow/app.py

@@ -114,14 +114,12 @@ class Application:
 
     def _init_transport(self):
         with require(
-            self, "bot", "config", "user_service", "moderator_service", "translator"
-        ) as (bot, config, user_service, moderator_service, translator):
+            self, "bot", "config", "translator"
+        ) as (bot, config, translator):
             self.message_router = MessageRouter(
                 moderation_chat_ids=config.forwarding.moderation_chat_ids,
                 publication_channel_ids=config.forwarding.publication_channel_ids,
                 delivery_service=DeliveryService(bot),
-                user_service=user_service,
-                moderator_service=moderator_service,
                 translator=translator
             )
 
@@ -193,12 +191,23 @@ class Application:
         self._logger.info(f"Anonflow v{__version_str__} has been successfully initialized.")
 
         with require(
-            self, "bot", "dispatcher", "config", "database", "message_router", "moderation_planner", "moderation_executor"
-        ) as (bot, dispatcher, config, database, message_router, moderation_planner, moderation_executor):
+            self,
+            "bot", "dispatcher", "config",
+            "database", "message_router",
+            "user_service", "moderator_service",
+            "moderation_planner", "moderation_executor"
+        ) as (
+            bot, dispatcher, config,
+            database, message_router,
+            user_service, moderator_service,
+            moderation_planner, moderation_executor
+        ):
             dispatcher.include_router(
                 build_routers(
                     config=config,
                     message_router=message_router,
+                    user_service=user_service,
+                    moderator_service=moderator_service,
                     moderation_executor=moderation_executor,
                 )
             )

+ 7 - 2
anonflow/bot/builders/routers.py

@@ -2,7 +2,7 @@ from aiogram import Router
 
 from anonflow.config import Config
 from anonflow.moderation import ModerationExecutor
-from anonflow.services import MessageRouter
+from anonflow.services import MessageRouter, ModeratorService, UserService
 
 from anonflow.bot.routers import (
     InfoRouter,
@@ -14,12 +14,17 @@ from anonflow.bot.routers import (
 def build(
     config: Config,
     message_router: MessageRouter,
+    user_service: UserService,
+    moderator_service: ModeratorService,
     moderation_executor: ModerationExecutor,
 ) -> Router:
     main_router = Router()
 
     routers = [
-        StartRouter(message_router=message_router),
+        StartRouter(
+            message_router=message_router,
+            user_service=user_service
+        ),
         InfoRouter(message_router=message_router),
         TextRouter(
             message_router=message_router,

+ 8 - 6
anonflow/bot/routers/start.py

@@ -2,20 +2,22 @@ from aiogram import Router
 from aiogram.filters import CommandStart
 from aiogram.types import Message
 
-from anonflow.services import MessageRouter
+from anonflow.services import MessageRouter, UserService
 from anonflow.services.transport.results import CommandStartResult
 
 
 class StartRouter(Router):
-    def __init__(self, message_router: MessageRouter):
+    def __init__(self, message_router: MessageRouter, user_service: UserService):
         super().__init__()
         self.message_router = message_router
+        self.user_service = user_service
 
     def setup(self):
         @self.message(CommandStart())
         async def on_start(message: Message):
             if message.from_user:
-                await self.message_router.dispatch(
-                    CommandStartResult(message.from_user.id),
-                    message
-                )
+                await self.user_service.add(message.from_user.id)
+            await self.message_router.dispatch(
+                CommandStartResult(),
+                message
+            )

+ 1 - 1
anonflow/services/transport/results.py

@@ -14,7 +14,7 @@ class CommandInfoResult(Result):
 
 @dataclass(frozen=True)
 class CommandStartResult(Result):
-    user_id: int
+    pass
 
 @dataclass(frozen=True)
 class PostPreparedResult(Result):

+ 0 - 6
anonflow/services/transport/router.py

@@ -3,7 +3,6 @@ from typing import Any, Callable, Dict, Tuple
 
 from aiogram.types import ChatIdUnion, Message
 
-from anonflow.services.accounts import UserService, ModeratorService
 from anonflow.translator import Translator
 
 from .content import ContentMediaGroup, ContentTextItem
@@ -28,15 +27,11 @@ class MessageRouter:
         moderation_chat_ids: Tuple[ChatIdUnion],
         publication_channel_ids: Tuple[ChatIdUnion],
         delivery_service: DeliveryService,
-        user_service: UserService,
-        moderator_service: ModeratorService,
         translator: Translator
     ):
         self.moderation_chat_ids = moderation_chat_ids
         self.publication_channel_ids = publication_channel_ids
         self.delivery_service = delivery_service
-        self.user_service = user_service
-        self.moderator_service = moderator_service
         self.translator = translator
 
         self._handlers: Dict[Any, Callable] = {
@@ -55,7 +50,6 @@ class MessageRouter:
         await self.delivery_service.send_text(message.chat.id, _("messages.user.command_info", message=message))
 
     async def _handle_command_start(self, result: CommandStartResult, message: Message, _):
-        await self.user_service.add(result.user_id)
         await self.delivery_service.send_text(message.chat.id, _("messages.user.command_start", message=message))
 
     async def _handle_post_prepared(self, result: PostPreparedResult, message: Message, _):