Sync Service
Файл:
backend/src/services/sync_cmd.rs
Сервис S3-синхронизации. Анализирует различия между локальными файлами и объектами в S3-хранилище, формирует план синхронизации и выполняет его с прогресс-уведомлениями.
Эндпоинты
| Метод | Путь | Функция | Описание |
|---|---|---|---|
| POST | /api/sync/analyze | analyze_sync_svc | Анализ и построение плана синхронизации |
| POST | /api/sync/execute | execute_sync_svc | Выполнение плана синхронизации |
Зависимости
SharedState— глобальное состояние (содержит S3Client)S3Client— клиент для работы с S3-совместимым хранилищемEventBus— прогресс-уведомления в UI
analyze_sync_svc
POST /api/sync/analyze
Анализирует локальную директорию и S3-бакет, строит план действий для синхронизации.
Параметры
| Имя | Тип | Описание |
|---|---|---|
local_dir | String | Путь к локальной директории |
bucket | String | Имя S3-бакета |
prefix | Option<String> | Префикс в бакете |
options | Option<SyncOptions> | Опции (delete_missing и др.) |
Возвращает
Result<SyncPlan, String> — план с действиями: Upload, Update, Delete
Логика
- Рекурсивно сканирует локальную директорию (
scan_directory()) - Получает список объектов из S3 (
list_objects()) - Для каждого локального файла:
- Если есть в S3 и
needs_update()— действие Update - Если нет в S3 — действие Upload
- Если без изменений — пропуск
- Если есть в S3 и
- Если
delete_missingвключён — файлы в S3 без локальных → действие Delete - Возвращает
SyncPlanсо списком действий
execute_sync_svc
POST /api/sync/execute
Выполняет план синхронизации, загружая/обновляя/удаляя файлы в S3.
Параметры
| Имя | Тип | Описание |
|---|---|---|
event_bus | EventBus | Шина событий для прогресса |
local_dir | String | Путь к локальной директории |
bucket | String | Имя S3-бакета |
plan | SyncPlan | План из analyze_sync_svc |
Возвращает
Result<String, String> — сообщение о завершении
Логика
- Итерирует по действиям плана:
- Upload/Update: читает файл → загружает в S3 → прогресс-событие
- Delete: удаляет объект из S3
- Download: логирует (не реализовано)
- Записывает метрики (количество байт)
- Отправляет SSE progress-события после каждого действия