feat(template-folder): delete folder blocked if non-empty
This commit is contained in:
@@ -122,4 +122,37 @@ public class TemplateFolderService
|
||||
|
||||
return Result<TemplateFolder>.Success(folder);
|
||||
}
|
||||
|
||||
public async Task<Result<bool>> DeleteFolderAsync(
|
||||
int folderId, string user,
|
||||
CancellationToken cancellationToken = default)
|
||||
{
|
||||
var folder = await _repository.GetFolderByIdAsync(folderId, cancellationToken);
|
||||
if (folder == null)
|
||||
return Result<bool>.Failure($"Folder with ID {folderId} not found.");
|
||||
|
||||
var allFolders = await _repository.GetAllFoldersAsync(cancellationToken);
|
||||
var allTemplates = await _repository.GetAllTemplatesAsync(cancellationToken);
|
||||
|
||||
var childFolderCount = allFolders.Count(f => f.ParentFolderId == folderId);
|
||||
var childTemplateCount = allTemplates.Count(t => t.FolderId == folderId);
|
||||
|
||||
if (childFolderCount > 0 || childTemplateCount > 0)
|
||||
{
|
||||
var parts = new List<string>();
|
||||
if (childTemplateCount > 0)
|
||||
parts.Add($"{childTemplateCount} template{(childTemplateCount == 1 ? "" : "s")}");
|
||||
if (childFolderCount > 0)
|
||||
parts.Add($"{childFolderCount} subfolder{(childFolderCount == 1 ? "" : "s")}");
|
||||
return Result<bool>.Failure(
|
||||
$"Cannot delete folder '{folder.Name}': it contains {string.Join(" and ", parts)}. " +
|
||||
"Move or delete contents first.");
|
||||
}
|
||||
|
||||
await _repository.DeleteFolderAsync(folderId, cancellationToken);
|
||||
await _repository.SaveChangesAsync(cancellationToken);
|
||||
await _auditService.LogAsync(user, "Delete", "TemplateFolder", folderId.ToString(), folder.Name, null, cancellationToken);
|
||||
|
||||
return Result<bool>.Success(true);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user