示例#1
0
        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
            });
        }
示例#2
0
        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") });
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
        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);
        }
示例#6
0
 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)
     });
 }
示例#7
0
        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);
        }
示例#8
0
        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));
        }
示例#9
0
        // 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();
        }