# Checklist для разработки новых функций

## Добавление новой Tauri команды

- [ ] Создать функцию с атрибутом `#[tauri::command]`
- [ ] Использовать async для I/O операций
- [ ] Добавить правильную обработку ошибок (Result<T, String>)
- [ ] Зарегистрировать команду в `app_builder.rs`
- [ ] Написать unit тесты для команды
- [ ] Добавить интеграционные тесты если нужно
- [ ] Обновить TypeScript типы (запустить в debug режиме)
- [ ] Документировать команду в README модуля
- [ ] Проверить команду через `cargo fmt` и `cargo clippy`
- [ ] Добавить метрики для мониторинга если применимо

## Создание нового модуля

### Структура файлов
- [ ] Создать директорию в `src/`
- [ ] Создать `mod.rs` с публичными экспортами
- [ ] Создать `types.rs` для структур данных
- [ ] Создать `commands.rs` для Tauri команд
- [ ] Создать `errors.rs` для custom ошибок (если нужно)
- [ ] Создать директорию `tests/` с тестами
- [ ] Создать `README.md` с документацией модуля

### Интеграция
- [ ] Добавить `mod module_name;` в `lib.rs`
- [ ] Зарегистрировать команды в `app_builder.rs`
- [ ] Добавить состояние модуля в `lib.rs::run()` если нужно
- [ ] Настроить DI для сервисов модуля
- [ ] Интегрировать с Event Bus если нужны события
- [ ] Добавить метрики через Telemetry модуль

### Тестирование
- [ ] Unit тесты для всех публичных функций
- [ ] Интеграционные тесты для команд
- [ ] Mock объекты для внешних зависимостей
- [ ] Проверить покрытие кода (target: >80%)
- [ ] Тесты производительности для критичных операций

## Интеграция с внешними сервисами

- [ ] Создать сервис в модуле
- [ ] Реализовать trait для DI
- [ ] Добавить конфигурацию сервиса
- [ ] Реализовать retry логику
- [ ] Добавить timeout для операций
- [ ] Логировать все внешние вызовы
- [ ] Добавить метрики для мониторинга
- [ ] Создать mock для тестов
- [ ] Документировать API endpoints

## Работа с медиафайлами

- [ ] Использовать существующий Media модуль
- [ ] Проверять поддержку формата
- [ ] Кэшировать метаданные
- [ ] Генерировать превью асинхронно
- [ ] Обрабатывать ошибки FFmpeg
- [ ] Добавить прогресс события
- [ ] Тестировать с разными форматами

## Безопасность

- [ ] Валидировать все входные данные
- [ ] Использовать SecureStorage для ключей
- [ ] Не логировать конфиденциальные данные
- [ ] Проверять пути файлов (path traversal)
- [ ] Использовать санитизацию для shell команд
- [ ] Ограничивать размеры загружаемых файлов

## Производительность

- [ ] Использовать кэширование где возможно
- [ ] Применять lazy loading
- [ ] Использовать стриминг для больших файлов
- [ ] Добавить параллельную обработку
- [ ] Измерить производительность
- [ ] Оптимизировать критические пути

## Документация

- [ ] Документировать публичные API
- [ ] Добавить примеры использования
- [ ] Обновить главный README
- [ ] Добавить комментарии к сложному коду
- [ ] Создать migration guide если нужно
- [ ] Обновить CHANGELOG

## Code Review Checklist

### Перед отправкой на review
- [ ] `cargo fmt --all`
- [ ] `cargo clippy -- -D warnings`
- [ ] `cargo test`
- [ ] `cargo build --release`
- [ ] Проверить отсутствие TODO комментариев
- [ ] Проверить отсутствие отладочных print!

### Review критерии
- [ ] Код следует архитектурным принципам
- [ ] Нет дублирования кода
- [ ] Правильная обработка ошибок
- [ ] Достаточное покрытие тестами
- [ ] Документация актуальна
- [ ] Нет проблем с безопасностью
- [ ] Производительность приемлема

## Деплой

- [ ] Проверить все платформы (Windows, macOS, Linux)
- [ ] Проверить обратную совместимость
- [ ] Обновить версию в Cargo.toml
- [ ] Создать release notes
- [ ] Проверить размер бинарника
- [ ] Запустить e2e тесты

## Мониторинг после деплоя

- [ ] Проверить метрики производительности
- [ ] Мониторить error rate
- [ ] Проверить использование памяти
- [ ] Следить за логами
- [ ] Быть готовым к rollback