private static AuditUpdate GetAuditUpdate(AuditXmlUpdate auditXmlUpdate, string commitSha) { var mapper = MapperHelper.GetAutoMapper(); var realmSpeakers = auditXmlUpdate.Speakers.Select(mapper.Map <Speaker>).ToArray(); var realmFriends = auditXmlUpdate.Friends.Select(mapper.Map <Friend>).ToArray(); var realmVenues = auditXmlUpdate.Venues.Select(mapper.Map <Venue>).ToArray(); var realmCommunities = auditXmlUpdate.Communities.Select(mapper.Map <Community>).ToArray(); var talkMapper = MapperHelper.GetTalkMapper(realmSpeakers); var realmTalks = auditXmlUpdate.Talks.Select(talkMapper.Map <Talk>).ToArray(); var meetupMapper = MapperHelper.GetMeetupMapper(realmFriends, realmVenues, realmTalks); var realmMeetups = auditXmlUpdate.Meetups.Select(meetupMapper.Map <Meetup>).ToArray(); var auditVersion = new AuditVersion { CommitHash = commitSha }; return(new AuditUpdate { AuditVersion = auditVersion, Venues = realmVenues, Communities = realmCommunities, Friends = realmFriends, Meetups = realmMeetups, Speakers = realmSpeakers, Talks = realmTalks }); }
private static IEnumerable <Uri> GetMissingVenues(AuditXmlUpdate auditXmlUpdate, MeetupEntity meetup) { var isNewVenue = auditXmlUpdate.Venues.Any(venue => venue.Id == meetup.VenueId); return(isNewVenue ? Enumerable.Empty <Uri>() : new Uri[] { new Uri($"https://raw.githubusercontent.com/DotNetRu/Audit/master/db/venues/{meetup.VenueId}.xml") }); }
private static IEnumerable <Uri> GetMissingSpeakers(AuditXmlUpdate auditXmlUpdate, TalkEntity talk) { var existingSpeakers = talk.SpeakerIds.ExceptBy(auditXmlUpdate.Speakers.Select(speaker => speaker.Id), x => x); var speakerUrls = existingSpeakers.Select(speaker => new Uri($"https://raw.githubusercontent.com/DotNetRu/Audit/master/db/speakers/{speaker}/index.xml")); return(speakerUrls); }
private static IEnumerable <Uri> GetMissingFriends(AuditXmlUpdate auditXmlUpdate, MeetupEntity meetup) { var existingFriends = meetup.FriendIds.EmptyIfNull().ExceptBy(auditXmlUpdate.Friends.Select(friend => friend.Id), x => x); var friendUrls = existingFriends.Select(friend => new Uri($"https://raw.githubusercontent.com/DotNetRu/Audit/master/db/friends/{friend}/index.xml")); return(friendUrls); }
private static IEnumerable <Uri> GetMissingTalks(AuditXmlUpdate auditXmlUpdate, MeetupEntity meetup) { var existingTalks = meetup.Sessions .Select(session => session.TalkId) .ExceptBy(auditXmlUpdate.Talks.Select(talk => talk.Id), x => x); var talkUrls = existingTalks.Select(talk => new Uri($"https://raw.githubusercontent.com/DotNetRu/Audit/master/db/talks/{talk}.xml")); return(talkUrls); }
public AuditXmlUpdate Merge(AuditXmlUpdate other) { return(new AuditXmlUpdate { Communities = Communities.Concat(other.Communities).DistinctBy(x => x.Name), Friends = Friends.Concat(other.Friends).DistinctBy(x => x.Id), Meetups = Meetups.Concat(other.Meetups).DistinctBy(x => x.Id), Speakers = Speakers.Concat(other.Speakers).DistinctBy(x => x.Id), Talks = Talks.Concat(other.Talks).DistinctBy(x => x.Id), Venues = Venues.Concat(other.Venues).DistinctBy(x => x.Id) }); }
public static void ReplaceRealm(Realm realm, AuditXmlUpdate auditXmlUpdate) { var auditData = GetAuditUpdate(realm, auditXmlUpdate); ReplaceRealmObjects(realm, new[] { auditData.AuditVersion }, x => x.CommitHash); ReplaceRealmObjects(realm, auditData.Communities, x => x.Id); ReplaceRealmObjects(realm, auditData.Friends, x => x.Id); ReplaceRealmObjects(realm, auditData.Speakers, x => x.Id); ReplaceRealmObjects(realm, auditData.Talks, x => x.Id); ReplaceRealmObjects(realm, auditData.Venues, x => x.Id); ReplaceRealmObjects(realm, auditData.Meetups, x => x.Id); ReplaceRealmObjects(realm, auditData.Meetups.SelectMany(m => m.Sessions), x => x.Id); }
private static IEnumerable <Uri> GetDependencies(AuditXmlUpdate auditXmlUpdate) { var missingSpeakers = auditXmlUpdate.Talks.SelectMany(talk => GetMissingSpeakers(auditXmlUpdate, talk)); var missingFriends = auditXmlUpdate.Meetups.SelectMany(meetup => GetMissingFriends(auditXmlUpdate, meetup)); var missingVenues = auditXmlUpdate.Meetups.SelectMany(meetup => GetMissingVenues(auditXmlUpdate, meetup)); var missingTalks = auditXmlUpdate.Meetups.SelectMany(meetup => GetMissingTalks(auditXmlUpdate, meetup)); // TODO talk -> speakers return(missingSpeakers .Concat(missingFriends) .Concat(missingVenues) .Concat(missingTalks)); }
// TODO support deletion public static void UpdateRealm(Realm realm, AuditXmlUpdate auditXmlUpdate) { var auditData = GetAuditUpdate(realm, auditXmlUpdate); ReplaceRealmObjects(realm, new[] { auditData.AuditVersion }, x => x.CommitHash); using var transaction = realm.BeginWrite(); UpdateRealmObjects(realm, auditData.Communities); UpdateRealmObjects(realm, auditData.Friends); UpdateRealmObjects(realm, auditData.Speakers); UpdateRealmObjects(realm, auditData.Talks); UpdateRealmObjects(realm, auditData.Venues); UpdateRealmObjects(realm, auditData.Meetups); UpdateRealmObjects(realm, auditData.Meetups.SelectMany(m => m.Sessions)); transaction.Commit(); }