# Архитектура Backend

## Обзор

Tauri backend построен на Rust и предоставляет нативные десктопные возможности для приложения Timeline Studio. 

## Основные архитектурные компоненты

### Модульная структура

1. **Core инфраструктура** (`src/core/`)
   - `di/` - Dependency Injection контейнер
   - `events/` - Система событий и EventBus
   - `performance/` - Управление памятью и производительностью
   - `plugins/` - Система плагинов
   - `telemetry/` - Метрики и мониторинг

2. **Модуль безопасности** (`src/security/`)
   - `secure_storage.rs` - Безопасное хранение API ключей с шифрованием
   - `api_validator.rs` - Валидация API ключей сторонних сервисов
   - `api_validator_service.rs` - Сервис для асинхронной валидации
   - `oauth_handler.rs` - OAuth обработка для социальных сетей
   - `env_importer.rs` - Импорт ключей из .env файлов
   - `commands.rs` - Tauri команды для работы с безопасностью
   - `registry.rs` - Регистрация команд безопасности

3. **Модуль файловой системы** (`src/filesystem.rs`)
   - Файловые операции: чтение, запись, поиск
   - Управление директориями
   - Получение метаданных файлов
   - Кроссплатформенная обработка путей

4. **Медиа модуль** (`src/media/`)
   - `metadata.rs` - Анализ медиафайлов на основе FFmpeg
   - `ffmpeg.rs` - Интеграция и валидация FFmpeg
   - `types.rs` - Структуры данных для медиа
   - `preview_manager.rs` - Управление превью медиафайлов
   - `processor.rs` - Обработка медиафайлов

5. **Видео компилятор** (`src/video_compiler/`)
   - `core/` - Ядро компилятора (GPU, pipeline, кодеки)
   - `services/` - Сервисный слой с метриками
   - `commands/` - Обработчики команд Tauri
   - `cache/` - LRU кеш для превью и метаданных
   - `ffmpeg_builder/` - Построение команд FFmpeg
   - `progress/` - Отслеживание прогресса рендеринга
   - `schema/` - Определения схемы проекта

6. **Модуль распознавания** (`src/recognition/`)
   - `yolo_processor.rs` - Обработка YOLO моделей
   - `model_manager.rs` - Управление моделями машинного обучения
   - `frame_processor.rs` - Обработка кадров для распознавания
   - `result_aggregator.rs` - Агрегация результатов распознавания
   - `recognition_service.rs` - Сервис распознавания
   - `commands/` - Команды для работы с распознаванием

7. **Видео сервер** (`src/video_server/`)
   - HTTP сервер для стриминга видео
   - Поддержка Range запросов
   - Конфигурация CORS
   - Регистрация видеофайлов

8. **Плагины** (`src/plugins/`)
   - `examples/` - Примеры плагинов (BlurEffect, YouTubeUploader)
   - Интеграция с системой плагинов из core

## Управление состоянием

### Принципы
- Используйте `Arc<RwLock<T>>` для разделяемого изменяемого состояния
- Реализуйте `Default` для типов состояния
- Держите состояние минимальным и сфокусированным

### Пример структуры состояния
```rust
#[derive(Default)]
pub struct AppState {
    video_cache: Arc<RwLock<VideoCache>>,
    render_queue: Arc<RwLock<RenderQueue>>,
    server_state: Arc<RwLock<ServerState>>,
}
```

## Безопасность и возможности

### Модуль безопасности

Модуль безопасности (`src/security/`) обеспечивает защиту конфиденциальных данных:

1. **Безопасное хранение ключей**
   - Шифрование API ключей с использованием AES-GCM
   - Интеграция с системным хранилищем (Keychain на macOS, Credential Manager на Windows)
   - Автоматическая генерация и управление мастер-ключами

2. **Валидация API**
   - Проверка ключей OpenAI, Anthropic, Google Gemini
   - Асинхронная валидация с таймаутами
   - Кеширование результатов валидации

3. **OAuth интеграция**
   - Поддержка OAuth для YouTube, Instagram, TikTok
   - Безопасное хранение токенов доступа
   - Автоматическое обновление токенов

4. **Импорт из окружения**
   - Поиск и импорт ключей из .env файлов
   - Безопасная миграция существующих ключей
   - Поддержка различных форматов переменных

### Система возможностей Tauri

Приложение использует систему возможностей Tauri для безопасности:

1. **Доступ к файловой системе**
   - Чтение/запись в выбранные пользователем директории
   - Управление файлами проекта
   - Импорт медиафайлов

2. **Shell команды**
   - Выполнение FFmpeg для обработки видео
   - Запросы системной информации

3. **HTTP клиент**
   - API коммуникации
   - Проверка обновлений
   - Валидация внешних API

4. **Управление окнами**
   - Поддержка нескольких окон
   - Пользовательские элементы управления окнами

5. **Системная интеграция**
   - Доступ к Keychain/Credential Manager
   - Управление системными уведомлениями
   - Глобальные горячие клавиши

## Структура команд

Команды Tauri следуют этому паттерну:

```rust
#[tauri::command]
pub async fn command_name(
    state: State<'_, AppState>,
    param1: String,
    param2: Option<i32>
) -> Result<ReturnType, String> {
    // Реализация
}
```

## Сервисный слой

### Принципы проектирования
1. **Разделение ответственности** - Каждый сервис отвечает за одну область
2. **Dependency Injection** - Сервисы получают зависимости через конструктор
3. **Async/Await** - Все операции ввода-вывода асинхронные
4. **Обработка ошибок** - Использование Result<T, VideoCompilerError>

### Основные сервисы
- **RenderService** - Рендеринг видео
- **PreviewService** - Генерация превью
- **CacheService** - Управление кешем
- **MediaService** - Работа с медиафайлами
- **ProjectService** - Управление проектами

## Интеграция с Frontend

### Коммуникация
- Команды Tauri для вызова backend функционала
- События для уведомлений frontend
- Сериализация через Serde JSON

### Обработка прогресса
```rust
window.emit("render-progress", ProgressUpdate {
    percent: 0.75,
    message: Some("Кодирование видео...".to_string()),
})?;
```

## Система плагинов

### Архитектура плагинов
Система плагинов позволяет расширять функциональность Timeline Studio:

1. **Типы плагинов**
   - Эффекты и фильтры
   - Экспортеры и импортеры
   - Интеграции с внешними сервисами
   - Инструменты анализа

2. **Жизненный цикл плагина**
   - Регистрация в PluginRegistry
   - Инициализация с контекстом
   - Обработка команд
   - Очистка ресурсов

3. **Безопасность плагинов**
   - Изолированное выполнение
   - Система разрешений
   - Валидация зависимостей
   - Версионирование API

### Примеры плагинов
- **BlurEffectPlugin** - Эффект размытия для видео
- **YouTubeUploaderPlugin** - Загрузка видео на YouTube

## Core инфраструктура

### Dependency Injection
Контейнер DI обеспечивает управление зависимостями:

```rust
let container = ServiceContainer::new();
container.register::<dyn VideoService>(VideoServiceImpl::new());
let service = container.resolve::<dyn VideoService>()?;
```

### Система событий
EventBus позволяет компонентам общаться асинхронно:

```rust
event_bus.emit(AppEvent::RenderComplete { job_id });
event_bus.subscribe(|event| match event {
    AppEvent::RenderComplete { job_id } => handle_complete(job_id),
    _ => {}
});
```

### Телеметрия и мониторинг
- OpenTelemetry интеграция
- Prometheus метрики
- Структурированное логирование
- Health checks

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

### Стратегии оптимизации
1. **Кеширование** - LRU кеши для часто используемых данных
2. **Ленивая загрузка** - Загрузка данных по требованию
3. **Стриминг** - Обработка больших файлов по частям
4. **Параллелизм** - Использование tokio для асинхронных операций
5. **Zero-copy** - Минимизация копирования данных в памяти
6. **GPU ускорение** - Использование аппаратных кодировщиков

### Мониторинг
- Метрики производительности через систему телеметрии
- Отслеживание использования памяти и CPU
- Логирование медленных операций
- Профилирование критических путей