public async Task <OperationResult <bool> > Delete(Library.Identity.User user, Guid id) { var sw = new Stopwatch(); sw.Start(); var genre = DbContext.Genres.FirstOrDefault(x => x.RoadieId == id); if (genre == null) { return(new OperationResult <bool>(true, string.Format("Genre Not Found [{0}]", id))); } DbContext.Genres.Remove(genre); await DbContext.SaveChangesAsync(); var genreImageFilename = genre.PathToImage(Configuration); if (File.Exists(genreImageFilename)) { File.Delete(genreImageFilename); } Logger.LogWarning("User `{0}` deleted Genre `{1}]`", user, genre); CacheManager.ClearRegion(genre.CacheRegion); sw.Stop(); return(new OperationResult <bool> { IsSuccess = true, Data = true, OperationTime = sw.ElapsedMilliseconds }); }
public async Task <OperationResult <bool> > Delete(Library.Identity.User user, Guid id) { var sw = new Stopwatch(); sw.Start(); var label = DbContext.Labels.FirstOrDefault(x => x.RoadieId == id); if (label == null) { return(new OperationResult <bool>(true, string.Format("Label Not Found [{0}]", id))); } DbContext.Labels.Remove(label); await DbContext.SaveChangesAsync(); var labelImageFilename = label.PathToImage(Configuration); if (File.Exists(labelImageFilename)) { File.Delete(labelImageFilename); } await BookmarkService.RemoveAllBookmarksForItem(BookmarkType.Label, label.Id); Logger.LogWarning("User `{0}` deleted Label `{1}]`", user, label); CacheManager.ClearRegion(label.CacheRegion); sw.Stop(); return(new OperationResult <bool> { IsSuccess = true, Data = true, OperationTime = sw.ElapsedMilliseconds }); }
private async Task <OperationResult <bool> > UpdateLastFMSessionKey(Library.Identity.User user, string token) { var lastFmSessionKeyResult = await LastFmHelper.GetSessionKeyForUserToken(token).ConfigureAwait(false); if (!lastFmSessionKeyResult.IsSuccess) { return(new OperationResult <bool>(false, $"Unable to Get LastFM Session Key For Token [{token}]")); } // Check concurrency stamp if (user.ConcurrencyStamp != user.ConcurrencyStamp) { return(new OperationResult <bool> { Errors = new List <Exception> { new Exception("User data is stale.") } }); } user.LastFMSessionKey = lastFmSessionKeyResult.Data; user.LastUpdated = DateTime.UtcNow; user.ConcurrencyStamp = Guid.NewGuid().ToString(); await DbContext.SaveChangesAsync().ConfigureAwait(false); CacheManager.ClearRegion(Library.Identity.User.CacheRegionUrn(user.RoadieId)); Logger.LogTrace($"User `{user}` Updated LastFm SessionKey"); return(new OperationResult <bool> { IsSuccess = true, Data = true }); }
private async Task <OperationResult <bool> > SetBookmark(Library.Identity.User user, BookmarkType bookmarktype, int bookmarkTargetId, bool isBookmarked) { var bookmark = DbContext.Bookmarks.FirstOrDefault(x => x.BookmarkTargetId == bookmarkTargetId && x.BookmarkType == bookmarktype && x.UserId == user.Id); if (!isBookmarked) { // Remove bookmark if (bookmark != null) { DbContext.Bookmarks.Remove(bookmark); await DbContext.SaveChangesAsync().ConfigureAwait(false); } } else { // Add bookmark if (bookmark == null) { await DbContext.Bookmarks.AddAsync(new data.Bookmark { UserId = user.Id, BookmarkTargetId = bookmarkTargetId, BookmarkType = bookmarktype, CreatedDate = DateTime.UtcNow, Status = Statuses.Ok }).ConfigureAwait(false); await DbContext.SaveChangesAsync().ConfigureAwait(false); } } CacheManager.ClearRegion(user.CacheRegion); return(new OperationResult <bool> { IsSuccess = true, Data = true }); }
public async Task <OperationResult <bool> > MergeLabelsIntoLabel(Library.Identity.User user, Guid intoLabelId, IEnumerable <Guid> labelIdsToMerge) { var sw = new Stopwatch(); sw.Start(); var errors = new List <Exception>(); var label = DbContext.Labels.FirstOrDefault(x => x.RoadieId == intoLabelId); if (label == null) { return(new OperationResult <bool>(true, string.Format("Merge Into Label Not Found [{0}]", intoLabelId))); } var now = DateTime.UtcNow; var labelsToMerge = (from l in DbContext.Labels join ltm in labelIdsToMerge on l.RoadieId equals ltm select l); foreach (var labelToMerge in labelsToMerge) { label.MusicBrainzId = label.MusicBrainzId ?? labelToMerge.MusicBrainzId; label.SortName = label.SortName ?? labelToMerge.SortName; label.Profile = label.Profile ?? labelToMerge.Profile; label.BeginDate = label.BeginDate ?? labelToMerge.BeginDate; label.EndDate = label.EndDate ?? labelToMerge.EndDate; label.Profile = label.Profile ?? labelToMerge.Profile; label.DiscogsId = label.DiscogsId ?? labelToMerge.DiscogsId; label.ImageUrl = label.ImageUrl ?? labelToMerge.ImageUrl; label.Tags = label.Tags.AddToDelimitedList(labelToMerge.Tags.ToListFromDelimited()); var altNames = labelToMerge.AlternateNames.ToListFromDelimited().ToList(); altNames.Add(labelToMerge.Name); altNames.Add(labelToMerge.SortName); altNames.Add(labelToMerge.Name.ToAlphanumericName()); label.AlternateNames = label.AlternateNames.AddToDelimitedList(altNames); label.URLs = label.URLs.AddToDelimitedList(labelToMerge.URLs.ToListFromDelimited()); var labelToMergeReleases = (from rl in DbContext.ReleaseLabels where rl.LabelId == labelToMerge.Id select rl); foreach (var labelToMergeRelease in labelToMergeReleases) { labelToMergeRelease.LabelId = label.Id; labelToMergeRelease.LastUpdated = now; } label.LastUpdated = now; await DbContext.SaveChangesAsync(); } await UpdateLabelCounts(label.Id, now); CacheManager.ClearRegion(label.CacheRegion); Logger.LogInformation($"MergeLabelsIntoLabel `{label}`, Merged Label Ids [{ string.Join(",", labelIdsToMerge) }] By User `{user}`"); sw.Stop(); return(new OperationResult <bool> { IsSuccess = !errors.Any(), Data = !errors.Any(), OperationTime = sw.ElapsedMilliseconds, Errors = errors }); }