public async Task <Album> AddItemsToAlbumAsync( AddItemToAlbumRequest request, CancellationToken cancellationToken) { Album?album; if (!request.AlbumId.HasValue) { album = await AddAsync(request.NewAlbumTitle !, cancellationToken); } else { album = await GetByIdAsync(request.AlbumId.Value, cancellationToken); } AddMediaIds(request, album); AddFolders(request, album); AddFilters(request, album); await _mediaStore.Albums.UpdateAsync(album, cancellationToken); await _bus.Publish(new ItemsAddedToAlbumMessage(album.Id)); return(album); }
private static void AddMediaIds(AddItemToAlbumRequest request, Album album) { if (request.MediaIds is { } ids&& ids.Any()) { AlbumInclude?idInclude = album.Includes .FirstOrDefault(x => x.Type == AlbumIncludeType.Ids); if (idInclude == null) { idInclude = new AlbumInclude() { Type = AlbumIncludeType.Ids }; album.Includes.Add(idInclude); } var toAdd = new HashSet <Guid>(idInclude.MediaIds); foreach (Guid newId in ids) { toAdd.Add(newId); } idInclude.MediaIds = toAdd; } }
private void AddFilters(AddItemToAlbumRequest request, Album album) { if (request.Filters is { } filters&& filters.Any()) { AlbumInclude?include = album.Includes .FirstOrDefault(x => x.Type == AlbumIncludeType.Query); if (include == null) { include = new AlbumInclude() { Type = AlbumIncludeType.Query }; album.Includes.Add(include); } include.Filters = filters; } }
private static void AddFolders(AddItemToAlbumRequest request, Album album) { if (request.Folders is { } folders&& folders.Any()) { AlbumInclude?folderInclude = album.Includes .FirstOrDefault(x => x.Type == AlbumIncludeType.Folder); if (folderInclude == null) { folderInclude = new AlbumInclude() { Type = AlbumIncludeType.Folder }; album.Includes.Add(folderInclude); } var toAdd = new HashSet <string>(folderInclude.Folders); toAdd.AddRange(folders); folderInclude.Folders = toAdd; } }