Enhance show deletion functionality to support media removal option
Updated the DeleteShowCommand and its handler to include an optional parameter for media deletion, allowing users to remove associated media files when deleting a show. Refactored related components and API calls to accommodate this new feature, ensuring a seamless user experience. Additionally, updated localization strings to reflect the new functionality and adjusted tests to verify the correct behavior of the deletion process with and without media.
This commit is contained in:
+39
-21
@@ -198,29 +198,13 @@ public sealed class ImportGridCommandHandler(
|
||||
|
||||
foreach (var configGroup in wanted)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(configGroup.Name))
|
||||
continue;
|
||||
if (names.ContainsKey(configGroup.Name.Trim()))
|
||||
if (
|
||||
string.IsNullOrWhiteSpace(configGroup.Name)
|
||||
|| names.ContainsKey(configGroup.Name.Trim())
|
||||
)
|
||||
continue;
|
||||
|
||||
var group = Group.Create(configGroup.Name, configGroup.Description);
|
||||
|
||||
foreach (var showName in configGroup.Shows ?? [])
|
||||
{
|
||||
if (Resolve(showName, shows, "Шоу", warnings) is { } showId)
|
||||
group.AddElement(GroupElementKind.Show, showId);
|
||||
}
|
||||
|
||||
foreach (var collectionName in configGroup.Collections ?? [])
|
||||
{
|
||||
if (Resolve(collectionName, collections, "Коллекция", warnings) is { } id)
|
||||
group.AddElement(GroupElementKind.Collection, id);
|
||||
}
|
||||
|
||||
if (group.Items.Count == 0)
|
||||
warnings.Add(
|
||||
$"Группа «{group.Name}» создана пустой — слоты по ней закроет аварийный фон."
|
||||
);
|
||||
var group = BuildGroup(configGroup, shows, collections, warnings);
|
||||
|
||||
dbContext.Groups.Add(group);
|
||||
// Статистика — кэш для карточки группы. Коллекция, заведённая этим же импортом, ещё не
|
||||
@@ -233,6 +217,40 @@ public sealed class ImportGridCommandHandler(
|
||||
return (names, created);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Собирает состав группы из имён файла: что нашлось — в позиции, чего нет — в замечания.
|
||||
/// Группа, где не нашлось ничего, всё равно создаётся, но с оговоркой: пустая группа — это
|
||||
/// дыра в эфире, и узнать о ней надо на импорте, а не после применения сетки.
|
||||
/// </summary>
|
||||
private static Group BuildGroup(
|
||||
GridConfigGroup configGroup,
|
||||
IReadOnlyDictionary<string, Guid> shows,
|
||||
IReadOnlyDictionary<string, Guid> collections,
|
||||
List<string> warnings
|
||||
)
|
||||
{
|
||||
var group = Group.Create(configGroup.Name, configGroup.Description);
|
||||
|
||||
foreach (var showName in configGroup.Shows ?? [])
|
||||
{
|
||||
if (Resolve(showName, shows, "Шоу", warnings) is { } showId)
|
||||
group.AddElement(GroupElementKind.Show, showId);
|
||||
}
|
||||
|
||||
foreach (var collectionName in configGroup.Collections ?? [])
|
||||
{
|
||||
if (Resolve(collectionName, collections, "Коллекция", warnings) is { } id)
|
||||
group.AddElement(GroupElementKind.Collection, id);
|
||||
}
|
||||
|
||||
if (group.Items.Count == 0)
|
||||
warnings.Add(
|
||||
$"Группа «{group.Name}» создана пустой — слоты по ней закроет аварийный фон."
|
||||
);
|
||||
|
||||
return group;
|
||||
}
|
||||
|
||||
/// <summary>Шоу по названиям. Одинаковые названия схлопываются в первое найденное.</summary>
|
||||
private Task<Dictionary<string, Guid>> ShowNamesAsync(CancellationToken cancellationToken) =>
|
||||
NamesAsync(
|
||||
|
||||
Reference in New Issue
Block a user