# App State - Разработка

## 📊 Текущее состояние

### Покрытие тестами
- **Общее**: 57.55%
- **Компоненты**: 97%
- **Сервисы**: 84.25%
- **Хуки**: 100% (полностью покрыты)

### Статистика тестов
- Всего тестов: 124
- Файлов с тестами: 12
- Все тесты проходят успешно

## 🏗️ Архитектура

### Текущая структура
```
app-state/
├── components/                     # UI компоненты
│   └── missing-files-dialog.tsx    # Диалог восстановления файлов
├── hooks/                          # React хуки
│   ├── use-app-settings.ts         # Основной хук доступа к настройкам
│   ├── use-current-project.ts      # Работа с текущим проектом
│   ├── use-recent-projects.ts      # Недавние проекты
│   ├── use-favorites.ts            # Избранные элементы
│   ├── use-media-files.ts          # Медиафайлы
│   └── use-music-files.ts          # Музыкальные файлы
├── services/                       # Бизнес-логика
│   ├── app-settings-machine.ts     # XState машина состояний
│   ├── app-settings-provider.tsx   # React Context провайдер
│   ├── app-directories-service.ts  # Управление директориями
│   ├── project-file-service.ts     # Работа с файлами проектов
│   └── store-service.ts            # Локальное хранилище
└── types/                          # TypeScript типы
    └── app-state.ts                # Определения типов
```

### Проблемы архитектуры

1. **Смешение ответственностей**
   - AppSettingsMachine содержит логику для:
     - Настроек пользователя (тема, язык, API ключи)
     - Управления проектами (текущий, недавние)
     - Медиабиблиотеки
     - Избранного

2. **Дублирование данных**
   - Медиафайлы хранятся в настройках приложения И в файлах проектов
   - Избранное существует на двух уровнях без четкого разделения

3. **Плохая изоляция**
   - Все хуки зависят от монолитного контекста
   - Сложно тестировать отдельные части

## 🔧 Рекомендации по рефакторингу

### План разделения на домены

1. **user-preferences/** - Настройки пользователя
   - Тема, язык, API ключи
   - Настройки интерфейса

2. **project-manager/** - Управление проектами
   - Текущий проект (путь, состояние)
   - Недавние проекты
   - Операции создания/открытия/сохранения

3. **media-library/** - Глобальная медиабиблиотека
   - Кеширование превью
   - Поиск и фильтрация

4. **favorites/** - Избранное на уровне приложения
   - Эффекты, фильтры, шаблоны

### Преимущества
- Лучшая тестируемость
- Четкие границы ответственности
- Независимая загрузка модулей
- Упрощенная разработка новых функций

## 📝 Соглашения по коду

### Хуки
```typescript
// Всегда используйте типизацию
export function useMyHook(): MyHookReturn {
  // Логика хука
}

// Документируйте публичные API
/**
 * Хук для доступа к медиафайлам
 * @returns Объект с медиафайлами и методами управления
 */
```

### Тестирование
```typescript
// Мокайте зависимости на уровне модуля
vi.mock("../hooks/use-app-settings", () => ({
  useAppSettings: () => mockAppSettings,
}))

// Очищайте моки перед каждым тестом
beforeEach(() => {
  vi.clearAllMocks()
})

// Тестируйте все сценарии использования
it("должен обрабатывать граничные случаи", () => {
  // Тест
})
```

### XState машины
```typescript
// Используйте setup для типобезопасности
export const myMachine = setup({
  types: {} as {
    context: MyContext
    events: MyEvents
  },
  actions: {
    // Определите действия
  },
  guards: {
    // Определите условия
  },
}).createMachine({
  // Конфигурация машины
})
```

## 🚀 Улучшения

### Краткосрочные (можно сделать сейчас)
1. ✅ Увеличить покрытие тестами StoreService (выполнено: 100%)
2. ✅ Добавить тесты для ProjectFileService (выполнено: 99%)
3. Увеличить покрытие AppSettingsProvider (текущее: 67%)
4. Документировать публичные API

### Среднесрочные
1. Разделить AppSettingsMachine на несколько машин
2. Создать фасадные хуки для обратной совместимости
3. Улучшить типизацию

### Долгосрочные
1. Полный рефакторинг с разделением на домены
2. Миграция на новую архитектуру
3. Оптимизация производительности

## 🐛 Известные проблемы

1. ✅ **StoreService** имеет низкое покрытие тестами (решено: 100%)
2. ✅ **ProjectFileService** требует больше тестов для валидации (решено: 99%)
3. **AppSettingsProvider** имеет среднее покрытие тестами (67%)
4. **AppSettingsMachine** имеет среднее покрытие тестами (78%)

## 📚 Дополнительные ресурсы

- [XState документация](https://xstate.js.org/docs/)
- [React Context оптимизация](https://react.dev/reference/react/useContext#optimizing-re-renders-when-passing-objects-and-functions)
- [Vitest моки](https://vitest.dev/guide/mocking.html)