refactor: add modal/validation utils and partial App encapsulation
Quick wins refactoring (Variant 1): - Created src/utils/modal_handler.rs (120+ lines) - 4 functions for modal handling (close, confirm, yes/no) - ModalAction enum for type-safe processing - English and Russian keyboard layout support - 4 unit tests - Created src/utils/validation.rs (180+ lines) - 7 validation functions (empty, length, IDs, etc) - Covers all common validation patterns - 7 unit tests - Partial App encapsulation: - Made config field private (readonly via app.config()) - Added 30+ getter/setter methods - Updated ui/messages.rs to use config() - Updated documentation: - REFACTORING_OPPORTUNITIES.md: #1 Complete, #5 Partial - CONTEXT.md: Added quick wins section Tests: 563 passed, 0 failed Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
# Возможности для рефакторинга
|
||||
|
||||
> Результаты аудита кодовой базы от 2026-02-01
|
||||
> Статус: В работе (1/10 категорий)
|
||||
> Статус: В работе (2/10 категорий завершены)
|
||||
|
||||
## Оглавление
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
## 1. Дублирование кода
|
||||
|
||||
**Приоритет:** 🔴 Высокий
|
||||
**Статус:** ✅ Частично выполнено
|
||||
**Статус:** ✅ ЗАВЕРШЕНО! (2026-02-01)
|
||||
**Объем:** 15-20% кодовой базы
|
||||
|
||||
### Проблемы
|
||||
@@ -46,8 +46,17 @@
|
||||
- Создан `src/utils/retry.rs` с двумя функциями: `with_timeout()` и `with_timeout_msg()`
|
||||
- Заменены 18+ использований `tokio::time::timeout` в `src/input/main_input.rs`
|
||||
- Код стал чище и короче (убрано вложенное Ok/Err матчинг)
|
||||
- [ ] Создать `modal_handler.rs` с общей логикой модальных окон
|
||||
- [ ] Создать `validation.rs` с переиспользуемыми валидаторами
|
||||
- [x] Создать `modal_handler.rs` с общей логикой модальных окон - **Выполнено** (2026-02-01)
|
||||
- Создан `src/utils/modal_handler.rs` (120+ строк)
|
||||
- 4 функции: `handle_modal_key()`, `should_close_modal()`, `should_confirm_modal()`, `handle_yes_no()`
|
||||
- Enum `ModalAction` для type-safe обработки
|
||||
- Поддержка английской и русской раскладки (y/д, n/т)
|
||||
- 4 unit теста (все проходят)
|
||||
- [x] Создать `validation.rs` с переиспользуемыми валидаторами - **Выполнено** (2026-02-01)
|
||||
- Создан `src/utils/validation.rs` (180+ строк)
|
||||
- 7 функций валидации: `is_non_empty()`, `is_within_length()`, `is_valid_chat_id()`, `is_valid_message_id()`, `is_valid_user_id()`, `has_items()`, `validate_text_input()`
|
||||
- Покрывает все основные паттерны валидации
|
||||
- 7 unit тестов (все проходят)
|
||||
|
||||
### Файлы
|
||||
|
||||
@@ -208,7 +217,7 @@ if let Some(chat_id) = app.selected_chat {
|
||||
## 5. Плохая инкапсуляция
|
||||
|
||||
**Приоритет:** 🔴 Высокий
|
||||
**Статус:** ❌ Не начато
|
||||
**Статус:** ✅ Частично выполнено (2026-02-01)
|
||||
**Объем:** Вся структура `App`
|
||||
|
||||
### Проблемы
|
||||
@@ -238,16 +247,20 @@ if let Some(chat_id) = app.selected_chat {
|
||||
|
||||
### Решение
|
||||
|
||||
- [ ] Сделать все поля приватными
|
||||
- [ ] Добавить getter методы где нужно
|
||||
- [ ] Добавить setter методы с валидацией
|
||||
- [x] Сделать критичные поля приватными - **Частично выполнено** (2026-02-01)
|
||||
- ✅ `config` сделан приватным (readonly через getter `app.config()`)
|
||||
- ✅ Добавлены 30+ методов-геттеров и сеттеров для всех полей
|
||||
- ⏳ Остальные поля оставлены pub для совместимости (требуется массовый рефакторинг)
|
||||
- [x] Добавить getter методы где нужно - **Выполнено**
|
||||
- 30+ методов: `phone_input()`, `set_phone_input()`, `screen()`, `set_screen()`, `is_loading()`, и т.д.
|
||||
- [ ] Полная инкапсуляция всех полей (требует обновления 170+ мест в коде)
|
||||
- [ ] Создать методы для операций (вместо прямого доступа)
|
||||
```rust
|
||||
// Вместо app.selected_chat = Some(chat_id)
|
||||
app.select_chat(chat_id);
|
||||
app.select_chat(chat_id); // Уже есть!
|
||||
|
||||
// Вместо app.chats.push(new_chat)
|
||||
app.add_chat(new_chat);
|
||||
app.add_chat(new_chat); // TODO
|
||||
```
|
||||
|
||||
### Файлы
|
||||
|
||||
Reference in New Issue
Block a user