private static void RecalculateBlogArchive(IRepository<BlogPartArchiveRecord> blogArchiveRepository, IBlogPostService blogPostService, BlogPostPart blogPostPart) { blogArchiveRepository.Flush(); // remove all current blog archive records var blogArchiveRecords = from bar in blogArchiveRepository.Table where bar.BlogPart == blogPostPart.BlogPart.Record select bar; blogArchiveRecords.ToList().ForEach(blogArchiveRepository.Delete); // get all blog posts for the current blog var posts = blogPostService.Get(blogPostPart.BlogPart, VersionOptions.Published); // create a dictionary of all the year/month combinations and their count of posts that are published in this blog var inMemoryBlogArchives = new Dictionary<DateTime, int>(); foreach (var post in posts) { if (!post.Has<CommonPart>()) continue; var commonPart = post.As<CommonPart>(); var key = new DateTime(commonPart.CreatedUtc.Value.Year, commonPart.CreatedUtc.Value.Month, 1); if (inMemoryBlogArchives.ContainsKey(key)) inMemoryBlogArchives[key]++; else inMemoryBlogArchives[key] = 1; } // create the new blog archive records based on the in memory values foreach (KeyValuePair<DateTime, int> item in inMemoryBlogArchives) { blogArchiveRepository.Create(new BlogPartArchiveRecord {BlogPart = blogPostPart.BlogPart.Record, Year = item.Key.Year, Month = item.Key.Month, PostCount = item.Value}); } }
private static void RecalculateTimetableArchive(IRepository<TimetablePartArchiveRecord> TimetableArchiveRepository, ITimetableAppointmentService TimetableAppointmentService, TimetableAppointmentPart TimetableAppointmentPart) { TimetableArchiveRepository.Flush(); // remove all current Timetable archive records var TimetableArchiveRecords = from bar in TimetableArchiveRepository.Table where bar.TimetablePart == TimetableAppointmentPart.TimetablePart.Record select bar; TimetableArchiveRecords.ToList().ForEach(TimetableArchiveRepository.Delete); // get all Timetable appointments for the current Timetable var appointments = TimetableAppointmentService.Get(TimetableAppointmentPart.TimetablePart, VersionOptions.Published); // create a dictionary of all the year/month combinations and their count of appointments that are published in this Timetable var inMemoryTimetableArchives = new Dictionary<DateTime, int>(appointments.Count()); foreach (var appointment in appointments) { if (!appointment.Has<CommonPart>()) continue; var commonPart = appointment.As<CommonPart>(); var key = new DateTime(commonPart.PublishedUtc.Value.Year, commonPart.PublishedUtc.Value.Month, 1); if (inMemoryTimetableArchives.ContainsKey(key)) inMemoryTimetableArchives[key]++; else inMemoryTimetableArchives[key] = 1; } // create the new Timetable archive records based on the in memory values foreach (KeyValuePair<DateTime, int> item in inMemoryTimetableArchives) { TimetableArchiveRepository.Create(new TimetablePartArchiveRecord {TimetablePart = TimetableAppointmentPart.TimetablePart.Record, Year = item.Key.Year, Month = item.Key.Month, AppointmentCount = item.Value}); } }
public void Given_Repository(bool cleanFolders) { if(cleanFolders) DeleteFiles(); serializer = new ItemJsonSerializer(dataPath); repo = new ItemRepository(serializer); repo.DataPath = dataPath; projectItem = repo.Create<Project>() as Project; storyItem = repo.Create<Story>() as Story; scenarioItem = repo.Create<Scenario>() as Scenario; interactionItem = new Interaction(); dataItem = new DataItem(); }
private static void RecalculateBlogArchive(IRepository<BlogArchiveRecord> blogArchiveRepository, IRepository<CommonRecord> commonRepository, BlogPost blogPost) { blogArchiveRepository.Flush(); //INFO: (erikpo) Remove all current blog archive records var blogArchiveRecords = from bar in blogArchiveRepository.Table where bar.Blog == blogPost.Blog.Record select bar; blogArchiveRecords.ToList().ForEach(blogArchiveRepository.Delete); //INFO: (erikpo) Get all blog posts for the current blog var postsQuery = from bpr in commonRepository.Table where bpr.ContentItemRecord.ContentType.Name == BlogPostDriver.ContentType.Name && bpr.Container.Id == blogPost.Blog.Record.Id orderby bpr.PublishedUtc select bpr; //INFO: (erikpo) Create a dictionary of all the year/month combinations and their count of posts that are published in this blog var inMemoryBlogArchives = new Dictionary<DateTime, int>(postsQuery.Count()); foreach (var post in postsQuery) { if (!post.PublishedUtc.HasValue) continue; var key = new DateTime(post.PublishedUtc.Value.Year, post.PublishedUtc.Value.Month, 1); if (inMemoryBlogArchives.ContainsKey(key)) inMemoryBlogArchives[key]++; else inMemoryBlogArchives[key] = 1; } //INFO: (erikpo) Create the new blog archive records based on the in memory values foreach (KeyValuePair<DateTime, int> item in inMemoryBlogArchives) { blogArchiveRepository.Create(new BlogArchiveRecord {Blog = blogPost.Blog.Record, Year = item.Key.Year, Month = item.Key.Month, PostCount = item.Value}); } }
private void RecalculateBlogArchive(IRepository<BlogPartArchiveRecord> blogArchiveRepository, BlogPostPart blogPostPart) { blogArchiveRepository.Flush(); var commonPart = blogPostPart.As<CommonPart>(); if(commonPart == null || !commonPart.CreatedUtc.HasValue) return; // get the time zone for the current request var timeZone = _workContextAccessor.GetContext().CurrentTimeZone; var previousCreatedUtc = _previousCreatedUtc.ContainsKey(blogPostPart) ? _previousCreatedUtc[blogPostPart] : DateTime.MinValue; previousCreatedUtc = TimeZoneInfo.ConvertTimeFromUtc(previousCreatedUtc, timeZone); var previousMonth = previousCreatedUtc.Month; var previousYear = previousCreatedUtc.Year; var newCreatedUtc = commonPart.CreatedUtc; newCreatedUtc = newCreatedUtc.HasValue ? TimeZoneInfo.ConvertTimeFromUtc(newCreatedUtc.Value, timeZone) : newCreatedUtc; var newMonth = newCreatedUtc.HasValue ? newCreatedUtc.Value.Month : 0; var newYear = newCreatedUtc.HasValue ? newCreatedUtc.Value.Year : 0; // if archives are the same there is nothing to do if (previousMonth == newMonth && previousYear == newYear) { return; } // decrement previous archive record var previousArchiveRecord = blogArchiveRepository.Table .Where(x => x.BlogPart == blogPostPart.BlogPart.Record && x.Month == previousMonth && x.Year == previousYear) .FirstOrDefault(); if (previousArchiveRecord != null && previousArchiveRecord.PostCount > 0) { previousArchiveRecord.PostCount--; } // if previous count is now zero, delete the record if (previousArchiveRecord != null && previousArchiveRecord.PostCount == 0) { blogArchiveRepository.Delete(previousArchiveRecord); } // increment new archive record var newArchiveRecord = blogArchiveRepository.Table .Where(x => x.BlogPart == blogPostPart.BlogPart.Record && x.Month == newMonth && x.Year == newYear) .FirstOrDefault(); // if record can't be found create it if (newArchiveRecord == null) { newArchiveRecord = new BlogPartArchiveRecord { BlogPart = blogPostPart.BlogPart.Record, Year = newYear, Month = newMonth, PostCount = 0 }; blogArchiveRepository.Create(newArchiveRecord); } newArchiveRecord.PostCount++; }