private static MusicBrainzArtistMusicBrainzAlias NewShadow(MusicBrainzArtist artist, MusicBrainzAlias alias) { return(new MusicBrainzArtistMusicBrainzAlias { MusicBrainzArtist = artist , MusicBrainzArtistUniqueId = artist.UniqueId , MusicBrainzAlias = alias , MusicBrainzAliasUniqueId = alias.UniqueId }); }
private static MusicBrainzArtist Map(DataContext context, JsonMusicBrainzRequest.ClaArtistCredit.ClaArtist json) { // references List <MusicBrainzAlias> aliases = json.Aliases?.Select(x => Map(context, x)).ToList() ?? new List <MusicBrainzAlias>(); // main object MusicBrainzArtist artist = new MusicBrainzArtist { Name = json.Name , Disambiguation = json.Disambiguation , SortName = json.SortName }; artist.UniqueHash = Comparator.ComputeContentHash(artist); MusicBrainzArtist dbArtist = context.SetArtists.Include(x => x.MusicBrainzArtistMusicBrainzAliases) .ThenInclude(x => x.MusicBrainzAlias) .FirstOrDefault(x => x.UniqueHash.Equals(artist.UniqueHash)); if (null == dbArtist) { // new entry // save to generate primary key context.SetArtists.Add(artist); context.SaveChanges(); // references artist.MusicBrainzArtistMusicBrainzAliases = aliases.Select(x => NewShadow(artist, x)).ToList(); context.SaveChanges(); return(artist); } // already exists, only check for new references IEnumerable <Int32> existingAliasIds = dbArtist.MusicBrainzArtistMusicBrainzAliases.Select(x => x.MusicBrainzAlias.UniqueId); IEnumerable <Int32> newAliasIds = aliases.Select(x => x.UniqueId).Except(existingAliasIds).Distinct(); IEnumerable <MusicBrainzArtistMusicBrainzAlias> newAliases = aliases.Where(x => newAliasIds.Contains(x.UniqueId)).Select(x => NewShadow(dbArtist, x)); dbArtist.MusicBrainzArtistMusicBrainzAliases.AddRange(newAliases); context.SaveChanges(); return(dbArtist); }
public IActionResult GetById(Int32?id) { try { LoggerBundle.Trace("Registered GET request on ArtistsController.GetById"); if (!IsAuthorized(out IActionResult result)) { LoggerBundle.Trace("Request not authorized"); return(result); } // validate if (id == null) { LoggerBundle.Trace("Validation failed: id is null"); return(StatusCode((Int32)HttpStatusCode.BadRequest)); } // get data using (DataContext dc = DataContextFactory.GetInstance()) { MusicBrainzArtist artist = dc.SetArtists.AsNoTracking() .Include(x => x.MusicBrainzArtistMusicBrainzAliases) .ThenInclude(x => x.MusicBrainzAlias) .FirstOrDefault(x => x.UniqueId.Equals(id)); if (null == artist) { LoggerBundle.Trace($"No artist found for given id '{id}'"); return(StatusCode((Int32)HttpStatusCode.NotFound)); } return(Ok(artist.ToJsonDictionary())); } } catch (Exception ex) { return(HandleException(ex)); } }
public static Dictionary <String, Object> ToJsonDictionary(this MusicBrainzArtist artist) { return(new Dictionary <String, Object> { { "UniqueId", artist.UniqueId } , { "Name", artist.Name } , { "Disambiguation", artist.Disambiguation } , { "Aliases", artist.MusicBrainzArtistMusicBrainzAliases?.Select(y => y.MusicBrainzAlias.ToJsonDictionary()) } }); }