# Интеграция метода recalculateCourseProgress

## Описание
Метод `recalculateCourseProgress(int $courseId)` в сервисе `CourseProgressService` пересчитывает прогресс всех пользователей курса при изменении статуса публикации уроков/тестов или их добавлении/удалении.

## Где интегрировать

### 1. CourseLessonController::update()
```php
// В методе update() после обновления урока
$lesson->update($validated);

// Добавить пересчет прогресса
$progressService = new CourseProgressService();
$result = $progressService->recalculateCourseProgress($courseId);

// Логирование результата (опционально)
\Log::info('Progress recalculated for course', $result);
```

### 2. CourseTestController::update()
```php
// В методе update() после обновления теста
$test->update($validated);

// Добавить пересчет прогресса
$progressService = new CourseProgressService();
$result = $progressService->recalculateCourseProgress($test->course_id);

// Логирование результата (опционально)
\Log::info('Progress recalculated for course', $result);
```

### 3. CourseLessonController::destroy()
```php
// В методе destroy() после удаления урока
$lesson->delete();

// Добавить пересчет прогресса
$progressService = new CourseProgressService();
$result = $progressService->recalculateCourseProgress($courseId);
```

### 4. CourseTestController::destroy()
```php
// В методе destroy() после удаления теста
$test->delete();

// Добавить пересчет прогресса
$progressService = new CourseProgressService();
$result = $progressService->recalculateCourseProgress($test->course_id);
```

### 5. CourseModuleController (при удалении модуля)
```php
// В методе destroy() после удаления модуля
$module->delete();

// Добавить пересчет прогресса
$progressService = new CourseProgressService();
$result = $progressService->recalculateCourseProgress($module->course_id);
```

## Возвращаемые данные
Метод возвращает массив с информацией о пересчете:
```php
[
    'course_id' => 123,
    'total_users' => 50,
    'updated_progress' => 48,
    'total_items' => 25,
    'published_lessons' => 20,
    'published_tests' => 5,
    'errors' => []
]
```

## Обработка ошибок
Метод обрабатывает ошибки для каждого пользователя отдельно и возвращает их в массиве `errors`. Основная логика продолжает работать даже при ошибках для отдельных пользователей.

## Производительность
- Метод оптимизирован для работы с большим количеством пользователей
- Использует эффективные запросы к базе данных
- Обрабатывает ошибки без прерывания общего процесса
