public async Task <StatusCodeResult> DeleteProjects([FromBody] List <string> projectNameList) { if (!_userResolver.IsAuthenticated) { _logger.LogError("Attempt to delete projects for anonymous user"); return(BadRequest()); } var bucket = await _userResolver.GetBucketAsync(true); // collect all oss objects for all provided projects var tasks = new List <Task>(); foreach (var projectName in projectNameList) { tasks.Add(bucket.DeleteObjectAsync(Project.ExactOssName(projectName))); foreach (var searchMask in ONC.ProjectFileMasks(projectName)) { var objects = await bucket.GetObjectsAsync(searchMask); foreach (var objectDetail in objects) { tasks.Add(bucket.DeleteObjectAsync(objectDetail.ObjectKey)); } } } // delete the OSS objects await Task.WhenAll(tasks); for (var i = 0; i < tasks.Count; i++) { if (tasks[i].IsFaulted) { _logger.LogError($"Failed to delete file #{i}"); } } // delete local cache for all provided projects foreach (var projectName in projectNameList) { var projectStorage = await _userResolver.GetProjectStorageAsync(projectName, ensureDir : false); projectStorage.DeleteLocal(); } return(NoContent()); }
public async Task DeleteProjects(ICollection <string> projectNameList, OssBucket bucket = null) { bucket ??= await _userResolver.GetBucketAsync(true); _logger.LogInformation($"deleting projects [{string.Join(", ", projectNameList)}] from bucket {bucket.BucketKey}"); // collect all oss objects for all provided projects var tasks = new List <Task>(); foreach (var projectName in projectNameList) { tasks.Add(bucket.DeleteObjectAsync(Project.ExactOssName(projectName))); foreach (var searchMask in ONC.ProjectFileMasks(projectName)) { var objects = await bucket.GetObjectsAsync(searchMask); foreach (var objectDetail in objects) { tasks.Add(bucket.DeleteObjectAsync(objectDetail.ObjectKey)); } } } // delete the OSS objects await Task.WhenAll(tasks); for (var i = 0; i < tasks.Count; i++) { if (tasks[i].IsFaulted) { _logger.LogError($"Failed to delete file #{i}"); } } // delete local cache for all provided projects foreach (var projectName in projectNameList) { var projectStorage = await _userResolver.GetProjectStorageAsync(projectName, ensureDir : false); projectStorage.DeleteLocal(); } }