refactor: implement newtype pattern for IDs (P2.4)
Добавлены типобезопасные обёртки ChatId, MessageId, UserId для предотвращения смешивания разных типов идентификаторов на этапе компиляции. Изменения: - Создан src/types.rs с тремя newtype структурами - Реализованы методы: new(), as_i64(), From<i64>, Display - Добавлены traits: Hash, Eq, Serialize, Deserialize - Обновлены 15+ модулей для использования новых типов: * tdlib: types.rs, chats.rs, messages.rs, users.rs, reactions.rs, client.rs * app: mod.rs, chat_state.rs * input: main_input.rs * tests: app_builder.rs, test_data.rs - Исправлены 53 ошибки компиляции связанные с type conversions Преимущества: - Компилятор предотвращает смешивание разных типов ID - Улучшенная читаемость кода (явные типы вместо i64) - Самодокументирующиеся типы Статус: Priority 2 теперь 60% (3/5 задач) - ✅ Error enum - ✅ Config validation - ✅ Newtype для ID - ⏳ MessageInfo реструктуризация - ⏳ MessageBuilder pattern Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
72
CONTEXT.md
72
CONTEXT.md
@@ -128,6 +128,7 @@
|
||||
src/
|
||||
├── main.rs # Точка входа, event loop, TDLib инициализация, graceful shutdown
|
||||
├── lib.rs # Библиотечный интерфейс (для тестов)
|
||||
├── types.rs # Типобезопасные обёртки (ChatId, MessageId, UserId)
|
||||
├── config.rs # Конфигурация (TOML), загрузка credentials
|
||||
├── app/
|
||||
│ ├── mod.rs # App структура и состояние (needs_redraw флаг)
|
||||
@@ -147,7 +148,13 @@ src/
|
||||
├── utils.rs # Утилиты (disable_tdlib_logs, format_timestamp_with_tz, format_date, get_day)
|
||||
└── tdlib/
|
||||
├── mod.rs # Модуль экспорта (TdClient, UserOnlineStatus, NetworkState)
|
||||
└── client.rs # TdClient: авторизация, чаты, сообщения, кеш, NetworkState, ReactionInfo
|
||||
├── client.rs # TdClient: авторизация, chats, messages, users, reactions
|
||||
├── auth.rs # AuthManager + AuthState enum
|
||||
├── chats.rs # ChatManager для операций с чатами
|
||||
├── messages.rs # MessageManager для сообщений
|
||||
├── users.rs # UserCache с LRU кэшем
|
||||
├── reactions.rs # ReactionManager
|
||||
└── types.rs # Общие типы данных (ChatInfo, MessageInfo, etc.)
|
||||
|
||||
tests/
|
||||
├── helpers/
|
||||
@@ -290,9 +297,48 @@ reaction_chosen = "yellow"
|
||||
reaction_other = "gray"
|
||||
```
|
||||
|
||||
## Последние обновления (2026-01-30)
|
||||
## Последние обновления (2026-01-31)
|
||||
|
||||
### Тестирование — ЗАВЕРШЕНО! 🎉🎊🚀
|
||||
### Рефакторинг — Priority 2 продолжается! 🏗️✨
|
||||
|
||||
**P2.4 — Newtype pattern для ID** ✅ ЗАВЕРШЕНО!
|
||||
|
||||
**Что сделано**:
|
||||
- ✅ Создан `src/types.rs` с типобезопасными обёртками для идентификаторов
|
||||
- ✅ Реализованы три типа: `ChatId(i64)`, `MessageId(i64)`, `UserId(i64)`
|
||||
- ✅ Добавлены методы: `new()`, `as_i64()`, `From<i64>`, `Display`, `Hash`, `Eq`, `Serialize/Deserialize`
|
||||
- ✅ Обновлены 15+ модулей для использования новых типов
|
||||
- ✅ Исправлены 53 ошибки компиляции связанные с type conversions
|
||||
- ✅ Компилятор теперь предотвращает смешивание разных типов ID на этапе компиляции
|
||||
|
||||
**Модули обновлены**:
|
||||
- `tdlib/types.rs` — ChatInfo, MessageInfo, ReplyInfo, ProfileInfo
|
||||
- `tdlib/chats.rs` — все методы с chat_id параметрами
|
||||
- `tdlib/messages.rs` — MessageManager, pending_view_messages
|
||||
- `tdlib/users.rs` — LruCache<UserId>, UserCache mappings
|
||||
- `tdlib/reactions.rs` — reaction methods
|
||||
- `tdlib/client.rs` — все публичные методы и Update handlers
|
||||
- `app/mod.rs` — selected_chat_id
|
||||
- `app/chat_state.rs` — все варианты ChatState
|
||||
- `input/main_input.rs` — обработка ввода с преобразованием типов
|
||||
- Test helpers — TestAppBuilder, TestChatBuilder, TestMessageBuilder
|
||||
|
||||
**Преимущества**:
|
||||
- 🛡️ Type safety на уровне компиляции — невозможно перепутать ChatId, MessageId, UserId
|
||||
- 🔍 Улучшенная читаемость кода — явные типы вместо i64
|
||||
- 🐛 Меньше ошибок — компилятор ловит проблемы до запуска
|
||||
- 📚 Лучшая документация — типы самодокументируются
|
||||
|
||||
**Статус Priority 2**: 60% (3/5 задач) ✅
|
||||
- ✅ Error enum
|
||||
- ✅ Config validation
|
||||
- ✅ Newtype для ID
|
||||
- ⏳ MessageInfo реструктуризация
|
||||
- ⏳ MessageBuilder pattern
|
||||
|
||||
---
|
||||
|
||||
### Тестирование — ЗАВЕРШЕНО! 🎉🎊🚀 (2026-01-30)
|
||||
|
||||
**Добавлено**:
|
||||
- 📝 93 integration теста (12 файлов): send_message, edit_message, delete_message, reply_forward, reactions, search, drafts, navigation, profile, network_typing, **copy**, **config**
|
||||
@@ -357,7 +403,7 @@ reaction_other = "gray"
|
||||
- Проще добавлять новые фичи
|
||||
- Лучше читаемость
|
||||
|
||||
**Priority 2 (40% завершено - 2/5)**:
|
||||
**Priority 2 (60% завершено - 3/5)**:
|
||||
- ✅ **P2.5 — Error enum** (завершено 2026-01-31)
|
||||
- Создан `src/error.rs` с типобезопасным enum `TeletuiError`
|
||||
- Добавлены варианты: TdLib, Config, Network, Auth, Chat, Message, User, InvalidTimezone, InvalidColor, Clipboard, Io, Toml, Json, Other
|
||||
@@ -373,7 +419,20 @@ reaction_other = "gray"
|
||||
- При загрузке невалидного конфига автоматически используется дефолтный
|
||||
- Все 350 тестов проходят ✅
|
||||
|
||||
**Следующие шаги**: Priority 2 (Newtype для ID, MessageBuilder, реструктуризация MessageInfo)
|
||||
- ✅ **P2.4 — Newtype pattern для ID** (завершено 2026-01-31)
|
||||
- Создан `src/types.rs` с типобезопасными обёртками: `ChatId`, `MessageId`, `UserId`
|
||||
- Реализованы методы: `new()`, `as_i64()`, `From<i64>`, `Display`, `Hash`, `Eq`, `Serialize/Deserialize`
|
||||
- Обновлены 15+ модулей для использования новых типов:
|
||||
- `tdlib/types.rs`: ChatInfo, MessageInfo, ReplyInfo, ProfileInfo
|
||||
- `tdlib/chats.rs`, `tdlib/messages.rs`, `tdlib/users.rs`, `tdlib/reactions.rs`
|
||||
- `tdlib/client.rs`: все методы и Update handlers
|
||||
- `app/mod.rs`, `app/chat_state.rs`
|
||||
- `input/main_input.rs`
|
||||
- Test helpers (app_builder, test_data)
|
||||
- Компилятор теперь предотвращает смешивание разных типов ID
|
||||
- Все тесты компилируются успешно ✅
|
||||
|
||||
**Следующие шаги**: Priority 2 (MessageBuilder, реструктуризация MessageInfo)
|
||||
|
||||
Подробности: [REFACTORING_ROADMAP.md](REFACTORING_ROADMAP.md)
|
||||
|
||||
@@ -393,9 +452,10 @@ reaction_other = "gray"
|
||||
**Завершено** (Priority 2):
|
||||
1. ~~**Error enum**~~ ✅ — типобезопасная обработка ошибок (2026-01-31)
|
||||
2. ~~**Config validation**~~ ✅ — валидация конфигурации при загрузке (2026-01-31)
|
||||
3. ~~**Newtype pattern для ID**~~ ✅ — типобезопасные обёртки ChatId, MessageId, UserId (2026-01-31)
|
||||
|
||||
**В работе** (Priority 2-5):
|
||||
1. **Типобезопасность** — newtype pattern для ID
|
||||
1. **MessageInfo реструктуризация** — упрощение структуры сообщений
|
||||
2. **MessageBuilder** — упрощение создания сообщений
|
||||
3. **UI компоненты** — выделить переиспользуемые компоненты
|
||||
4. **Форматирование** — вынести markdown форматирование в отдельный модуль
|
||||
|
||||
Reference in New Issue
Block a user