public static MusicBrainzAliasMusicBrainzRecord NewShadow(MusicBrainzRecord record, MusicBrainzAlias alias) { return(new MusicBrainzAliasMusicBrainzRecord { MusicBrainzRecord = record , MusicBrainzRecordUniqueId = record.UniqueId , MusicBrainzAlias = alias , MusicBrainzAliasUniqueId = alias.UniqueId }); }
public static MusicBrainzReleaseMusicBrainzRecord NewShadow(MusicBrainzRecord record, MusicBrainzRelease release) { return(new MusicBrainzReleaseMusicBrainzRecord { MusicBrainzRecord = record , MusicBrainzRecordUniqueId = record.UniqueId , MusicBrainzRelease = release , MusicBrainzReleaseUniqueId = release.UniqueId }); }
public static MusicBrainzTagMusicBrainzRecord NewShadow(MusicBrainzRecord record, MusicBrainzTag tag) { return(new MusicBrainzTagMusicBrainzRecord { MusicBrainzRecord = record , MusicBrainzRecordUniqueId = record.UniqueId , MusicBrainzTag = tag , MusicBrainzTagUniqueId = tag.UniqueId }); }
private void HandleResponse(MusicBrainzRecord mbr, JsonMusicBrainzRequest json, DataContext context) { LoggerBundle.Trace("Handling response..."); mbr.Disambiguation = json.Disambiguation; mbr.Length = json.Length; mbr.Title = json.Title; mbr.Video = json.Video; // aliases List <MusicBrainzAlias> aliases = json.Aliases?.Select(x => MusicBrainzMapper.Map(context, x)).ToList() ?? new List <MusicBrainzAlias>(); IEnumerable <Int32> existingAliasIds = mbr.MusicBrainzAliasMusicBrainzRecords.Select(x => x.MusicBrainzAliasUniqueId); IEnumerable <Int32> newAliasIds = aliases.Select(x => x.UniqueId).Except(existingAliasIds).Distinct(); IEnumerable <MusicBrainzAliasMusicBrainzRecord> newAliases = aliases.Where(x => newAliasIds.Contains(x.UniqueId)) .Select(x => MusicBrainzMapper.NewShadow(mbr, x)); mbr.MusicBrainzAliasMusicBrainzRecords.AddRange(newAliases); // artist credits List <MusicBrainzArtistCredit> credits = json.ArtistCredit?.Select(x => MusicBrainzMapper.Map(context, x)).ToList() ?? new List <MusicBrainzArtistCredit>(); IEnumerable <Int32> existingCreditIds = mbr.MusicBrainzArtistCreditMusicBrainzRecords.Select(x => x.MusicBrainzArtistCreditUniqueId); IEnumerable <Int32> newCreditIds = credits.Select(x => x.UniqueId).Except(existingCreditIds).Distinct(); IEnumerable <MusicBrainzArtistCreditMusicBrainzRecord> newCredits = credits .Where(x => newCreditIds.Contains(x.UniqueId)) .Select(x => MusicBrainzMapper.NewShadow(mbr, x)); mbr.MusicBrainzArtistCreditMusicBrainzRecords.AddRange(newCredits); // releases List <MusicBrainzRelease> releases = json.Releases?.Select(x => MusicBrainzMapper.Map(context, x)).ToList() ?? new List <MusicBrainzRelease>(); IEnumerable <Int32> existingReleaseIds = mbr.MusicBrainzReleaseMusicBrainzRecords.Select(x => x.MusicBrainzReleaseUniqueId); IEnumerable <Int32> newReleaseIds = releases.Select(x => x.UniqueId).Except(existingReleaseIds).Distinct(); IEnumerable <MusicBrainzReleaseMusicBrainzRecord> newReleases = releases .Where(x => newReleaseIds.Contains(x.UniqueId)) .Select(x => MusicBrainzMapper.NewShadow(mbr, x)); mbr.MusicBrainzReleaseMusicBrainzRecords.AddRange(newReleases); // tags List <MusicBrainzTag> tags = json.Tags?.Select(x => MusicBrainzMapper.Map(context, x)).ToList() ?? new List <MusicBrainzTag>(); IEnumerable <Int32> existingTagIds = mbr.MusicBrainzTagMusicBrainzRecords.Select(x => x.MusicBrainzTagUniqueId); IEnumerable <Int32> newTagIds = tags.Select(x => x.UniqueId).Except(existingTagIds).Distinct(); IEnumerable <MusicBrainzTagMusicBrainzRecord> newTags = tags.Where(x => newTagIds.Contains(x.UniqueId)) .Select(x => MusicBrainzMapper.NewShadow(mbr, x)); mbr.MusicBrainzTagMusicBrainzRecords.AddRange(newTags); }
public static MusicBrainzArtistCreditMusicBrainzRecord NewShadow(MusicBrainzRecord record , MusicBrainzArtistCredit artistCredit) { return(new MusicBrainzArtistCreditMusicBrainzRecord { MusicBrainzRecord = record , MusicBrainzRecordUniqueId = record.UniqueId , MusicBrainzArtistCredit = artistCredit , MusicBrainzArtistCreditUniqueId = artistCredit.UniqueId }); }
private static void HandleRecordings(DataContext context, JsonAcoustIdRequest.JsonResult json, AcoustId ai) { json.Recordings?.ForEach(recording => { MusicBrainzRecord mbr = context.SetMusicBrainzRecords.Include(x => x.MusicBrainzRecordAcoustIds) .ThenInclude(x => x.AcoustId) .FirstOrDefault(x => x.MusicbrainzId.Equals(recording.Id)); if (null == mbr) { // not found in database mbr = new MusicBrainzRecord { MusicbrainzId = recording.Id , MusicBrainzRecordAcoustIds = new List <MusicBrainzRecordAcoustId>() }; context.SetMusicBrainzRecords.Add(mbr); context.SaveChanges(); mbr.MusicBrainzRecordAcoustIds.Add(new MusicBrainzRecordAcoustId { AcoustIdUniqueId = ai.UniqueId , AcoustId = ai , MusicBrainzRecord = mbr , MusicBrainzRecordUniqueId = mbr.UniqueId }); context.SaveChanges(); return; // continue in foreach } if (mbr.MusicBrainzRecordAcoustIds.Any(x => x.AcoustId.Id.Equals(ai.Id))) { // reference already exists return; } // no reference yet -> create one mbr.MusicBrainzRecordAcoustIds.Add(new MusicBrainzRecordAcoustId { AcoustIdUniqueId = ai.UniqueId , AcoustId = ai , MusicBrainzRecord = mbr , MusicBrainzRecordUniqueId = mbr.UniqueId }); context.SaveChanges(); }); }
public static IDictionary <String, Object> ToJsonDictionary(this MusicBrainzRecord record) { return(new Dictionary <String, Object> { { "UniqueId", record.UniqueId } , { "Title", record.Title } , { "Disambiguation", record.Disambiguation } , { "Length", record.Length } }); }
public IActionResult GetById(Int32?id) { try { LoggerBundle.Trace("Registered GET request on RecordsController.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()) { MusicBrainzRecord record = dc.SetMusicBrainzRecords.AsNoTracking() .FirstOrDefault(x => x.UniqueId.Equals(id)); if (null == record) { LoggerBundle.Trace($"No record found for given id '{id}'"); // no matching record found return(StatusCode((Int32)HttpStatusCode.NotFound)); } return(Ok(record.ToJsonDictionary())); } } catch (Exception ex) { return(HandleException(ex)); } }
public IActionResult GetRecordsById(Int32?id) { try { LoggerBundle.Trace("Registered GET request on TracksController.GetRecordsById"); 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()) { Track track = dc.SetTracks.AsNoTracking() .Include(x => x.AcoustIdResults) .ThenInclude(x => x.AcoustId) .ThenInclude(x => x.MusicBrainzRecordAcoustIds) .ThenInclude(x => x.MusicBrainzRecord) .FirstOrDefault(x => x.UniqueId.Equals(id)); if (null == track) { LoggerBundle.Trace($"No track found for given id '{id}'"); return(StatusCode((Int32)HttpStatusCode.NotFound)); } // todo might need optimization with a direct database sql query // loop references and keep track of relevant stats Dictionary <MusicBrainzRecord, (Int32 count, Double sum)> ret = new Dictionary <MusicBrainzRecord, (Int32, Double)>(); track.AcoustIdResults.ForEach(x => { Double score = x.Score; x.AcoustId.MusicBrainzRecordAcoustIds.ForEach(y => { MusicBrainzRecord record = y.MusicBrainzRecord; if (!ret.ContainsKey(record)) { ret.Add(record, (1, score)); return; // continue } ret[record] = (ret[record].count + 1, ret[record].sum + score); }); }); return(Ok(ret.Select(x => new Dictionary <String, Object> { { "Score", x.Value.sum / x.Value.count } , // calculate match score (average) { "Record", x.Key.ToJsonDictionary() } }))); } } catch (Exception ex) { return(HandleException(ex)); } }