Implement media retry functionality and enhance error handling
ci / build-backend (push) Successful in 1m18s
ci / build-frontend (push) Failing after 15s
ci / tests (push) Skipped
ci / sonar (push) Skipped

Added endpoints for retrying failed media processing, allowing users to requeue media assets that encountered errors. Introduced error messages for scenarios where a media asset cannot be retried due to its status. Updated the MaintenanceBackgroundService to remove orphaned episodes and recompute group statistics, ensuring data integrity. Enhanced the frontend to support retry actions, including bulk retry options for failed media. Updated localization strings to reflect new features in both English and Russian.
This commit is contained in:
Leonid Pershin
2026-07-31 03:58:01 +03:00
parent 789357481d
commit 7163a0b937
16 changed files with 594 additions and 52 deletions
@@ -172,6 +172,7 @@ public class ChannelDebugExportTests
"effective-grid.json",
"groups-composition.json",
"groups.json",
"issues.json",
"junctions.json",
"library-collections.json",
"library-interstitials.json",
@@ -235,10 +236,21 @@ public class ChannelDebugExportTests
var composition = group.GetProperty("composition").EnumerateArray().Single();
Assert.Equal("Симпсоны", composition.GetProperty("name").GetString());
Assert.Equal(2, composition.GetProperty("unitCount").GetInt32());
// «Заведено» и «может выйти» — разные числа, и в дампе они стоят рядом: их расхождение
// и есть ответ на «почему в эфир пошло меньше, чем в библиотеке».
Assert.Equal(2, composition.GetProperty("playableUnits").GetInt32());
using var media = JsonDocument.Parse(files["library-media.json"]);
Assert.Equal(2, media.RootElement.GetProperty("total").GetInt32());
Assert.Empty(media.RootElement.GetProperty("problems").EnumerateArray());
// На здоровой библиотеке список проблем пуст — иначе он бы кричал волком при каждом дампе.
using var issues = JsonDocument.Parse(files["issues.json"]);
Assert.Empty(issues.RootElement.GetProperty("failedEpisodes").EnumerateArray());
Assert.Empty(issues.RootElement.GetProperty("orphanEpisodes").EnumerateArray());
Assert.Empty(
issues.RootElement.GetProperty("showsWithoutPlayableEpisodes").EnumerateArray()
);
}
[Fact]