public async Task DeleteEmptyFolder(FolderModel folder, CancellationToken cancellationToken) { if (folder.HasContent) { throw new InvalidOperationException($"Can not delete non-empty folder '{folder.Name}'"); } logger.LogInformation($"Deleting folder '{folder.Name}' ..."); await storageRepository.DeleteFolder(folder, cancellationToken); var hasAdviseGroup = folder.AdviseGroup != null; if (hasAdviseGroup) { // We erase advise group so that it could be deleted when no references left. folder.AdviseGroup = null; } folder.DeleteDate = clock.Now; await foldersRepository.UpdateFolder(folder, cancellationToken); if (hasAdviseGroup) { await adviseGroupService.DeleteOrphanAdviseGroups(cancellationToken); } logger.LogInformation($"The folder '{folder.Name}' was deleted successfully"); }
public async Task DeleteDisc(ItemId discId, string deleteComment, CancellationToken cancellationToken) { var deleteTime = clock.Now; var disc = DiscLibrary.GetDisc(discId); logger.LogInformation($"Deleting the disc '{disc.TreeTitle}' ..."); foreach (var song in disc.ActiveSongs) { await songsService.DeleteSong(song, deleteTime, deleteComment, cancellationToken); } if (disc.CoverImage != null) { logger.LogInformation($"Deleting disc cover image '{disc.CoverImage.TreeTitle}' ..."); await DeleteDiscCoverImage(disc.CoverImage, cancellationToken); } var updateDisc = false; var deleteOrphanAdviseGroups = false; if (disc.AdviseGroup != null) { // We erase advise group so that it could be deleted when no references left. disc.AdviseGroup = null; updateDisc = true; deleteOrphanAdviseGroups = true; } if (disc.AdviseSetInfo != null) { // We erase advise set for several reasons: // 1. In order to unnecessary (empty) advise sets could be deleted (manually). // 2. In order to deleted discs do not interfere with active discs within same advise set. // Otherwise some care should be taken in adviser for handling this case. // Overall there is no any use of advise sets for deleted discs. disc.AdviseSetInfo = null; updateDisc = true; } if (updateDisc) { await discsRepository.UpdateDisc(disc, cancellationToken); } if (deleteOrphanAdviseGroups) { await adviseGroupService.DeleteOrphanAdviseGroups(cancellationToken); } logger.LogInformation($"The Disc '{disc.TreeTitle}' was deleted successfully"); }