[core] Реализовать ядро — handler, session, auth, settings #3

Closed
opened 2026-03-26 22:02:23 +00:00 by putilovskiy_mikhail · 1 comment

Задача

Создать бизнес-логику ядра которая используется обоими ботами.

Зависимость: закрыть #1 и #2 перед началом.

Файлы

core/handler.py

Главная точка входа: handle(event: Incoming*) -> list[Outgoing*]

  • Маршрутизация по типу события (message / command / callback)
  • Вызов session / auth / settings менеджеров
  • Обработка ошибок платформы → OutgoingMessage с текстом ошибки

core/session.py

  • SessionManager.create(user_id, chat_id) — создать сессию
  • SessionManager.get(session_id) — получить активную сессию
  • SessionManager.close(session_id) — завершить
  • ChatManager.create_chat(user_id, name)ChatContext
  • ChatManager.list_chats(user_id)list[ChatContext]
  • ChatManager.archive_chat(user_id, chat_id)

core/auth.py

  • AuthFlow.start(user_id, platform) — инициировать
  • AuthFlow.confirm(user_id, code) — подтвердить
  • AuthFlow.get_state(user_id)"pending" | "confirmed" | "failed"

core/settings.py

  • SettingsManager.apply(user_id, action: SettingsAction)OutgoingMessage
  • Обработка: connect, disconnect, toggle_skill, set_soul, set_safety

Требования

  • Нет импортов aiogram / matrix-nio
  • Полное покрытие тестами tests/core/
## Задача Создать бизнес-логику ядра которая используется обоими ботами. **Зависимость:** закрыть #1 и #2 перед началом. ## Файлы ### `core/handler.py` Главная точка входа: `handle(event: Incoming*) -> list[Outgoing*]` - Маршрутизация по типу события (message / command / callback) - Вызов session / auth / settings менеджеров - Обработка ошибок платформы → OutgoingMessage с текстом ошибки ### `core/session.py` - `SessionManager.create(user_id, chat_id)` — создать сессию - `SessionManager.get(session_id)` — получить активную сессию - `SessionManager.close(session_id)` — завершить - `ChatManager.create_chat(user_id, name)` → `ChatContext` - `ChatManager.list_chats(user_id)` → `list[ChatContext]` - `ChatManager.archive_chat(user_id, chat_id)` ### `core/auth.py` - `AuthFlow.start(user_id, platform)` — инициировать - `AuthFlow.confirm(user_id, code)` — подтвердить - `AuthFlow.get_state(user_id)` → `"pending" | "confirmed" | "failed"` ### `core/settings.py` - `SettingsManager.apply(user_id, action: SettingsAction)` → `OutgoingMessage` - Обработка: connect, disconnect, toggle_skill, set_soul, set_safety ## Требования - Нет импортов aiogram / matrix-nio - Полное покрытие тестами `tests/core/`
Author
Owner

Реализовано — с архитектурными изменениями относительно описания.

Всё ядро реализовано в core/ и покрыто тестами. Но структура файлов изменилась — фиксирую для истории:

Что изменилось по сравнению с issue:

Issue описывал Что реализовано Причина
core/session.py + SessionManager core/chat.py + ChatManager Бот не управляет lifecycle контейнеров — это делает Master. Переименовали SessionManager → ChatManager, убрали create/close session
SessionManager.create/get/close ChatManager.get_or_create/rename/archive/list_active Управляем метаданными чатов (C1/C2/C3), а не сессиями

Что реализовано:

  • core/handler.pyEventDispatcher (Registry pattern: register по типу события + ключу)
  • core/store.pyStateStore Protocol + InMemoryStore + SQLiteStore
  • core/chat.pyChatManager (метаданные чатов)
  • core/auth.pyAuthManager (auth state machine)
  • core/settings.pySettingsManager
  • core/handlers/ — start, message, chat, callback, settings

Тесты: tests/core/ — test_dispatcher, test_chat, test_auth, test_settings, test_store, test_protocol, test_voice_slot, test_integration.

Закрываю как реализованное.

✅ Реализовано — с архитектурными изменениями относительно описания. Всё ядро реализовано в `core/` и покрыто тестами. Но структура файлов изменилась — фиксирую для истории: **Что изменилось по сравнению с issue:** | Issue описывал | Что реализовано | Причина | |---|---|---| | `core/session.py` + `SessionManager` | `core/chat.py` + `ChatManager` | Бот не управляет lifecycle контейнеров — это делает Master. Переименовали SessionManager → ChatManager, убрали `create/close session` | | `SessionManager.create/get/close` | `ChatManager.get_or_create/rename/archive/list_active` | Управляем метаданными чатов (C1/C2/C3), а не сессиями | **Что реализовано:** - `core/handler.py` — `EventDispatcher` (Registry pattern: register по типу события + ключу) - `core/store.py` — `StateStore` Protocol + `InMemoryStore` + `SQLiteStore` - `core/chat.py` — `ChatManager` (метаданные чатов) - `core/auth.py` — `AuthManager` (auth state machine) - `core/settings.py` — `SettingsManager` - `core/handlers/` — start, message, chat, callback, settings **Тесты:** `tests/core/` — test_dispatcher, test_chat, test_auth, test_settings, test_store, test_protocol, test_voice_slot, test_integration. Закрываю как реализованное.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: Surfaces_team/surfaces#3
No description provided.