30 lines
1.7 KiB
Markdown
30 lines
1.7 KiB
Markdown
# Документация разработчика
|
||
|
||
## Архитектура
|
||
Проект построен на **конечном автомате (FSM)**. Диалог управляется классом `DialogManager`.
|
||
Состояния: `COLLECT_FI` → `COLLECT_PHONE` → `COLLECT_TIME` → `CONFIRM` → `FINISHED`.
|
||
Поддерживаются возражения и перезапуск.
|
||
|
||
**Компоненты:**
|
||
- `core/fsm.py` – логика диалога.
|
||
- `core/validator.py` – валидация ФИО, телефона, парсинг времени.
|
||
- `core/exporter.py` – работа с Excel (атомарная запись, бэкапы).
|
||
- `services/vk_bot.py` – интеграция с VK API, обработка команд.
|
||
- `utils/middleware.py` – мидлвары (логирование, аналитика).
|
||
|
||
## Добавление нового поля в анкету
|
||
1. Добавить текст в `config/phrases.py`.
|
||
2. Расширить модель `LeadData` в `core/models.py`.
|
||
3. Добавить состояние в `DialogState` и методы в `DialogManager`.
|
||
4. Добавить валидатор в `core/validator.py`.
|
||
5. Обновить `ExcelExporter._init_file` и метод сохранения.
|
||
|
||
## Тестирование
|
||
Установите тестовые зависимости: `pip install pytest pytest-asyncio responses`.
|
||
Запуск: `pytest tests/`.
|
||
Пример теста для валидатора:
|
||
```python
|
||
def test_validate_fio():
|
||
from core.validator import validate_fio
|
||
assert validate_fio("Иванов Иван Иванович").is_valid
|
||
assert not validate_fio("John Doe").is_valid |