Exemple #1
0
 private static MusicBrainzArtistMusicBrainzAlias NewShadow(MusicBrainzArtist artist, MusicBrainzAlias alias)
 {
     return(new MusicBrainzArtistMusicBrainzAlias
     {
         MusicBrainzArtist = artist
         , MusicBrainzArtistUniqueId = artist.UniqueId
         , MusicBrainzAlias = alias
         , MusicBrainzAliasUniqueId = alias.UniqueId
     });
 }
Exemple #2
0
        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));
            }
        }
Exemple #4
0
 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())
         }
     });
 }