protected override async Task AfterLoadAsync(Post[] entities) { await base.AfterLoadAsync(entities); var sectionsIds = entities.SelectMany(p => p.SectionIds).Distinct().ToArray(); var sections = await SectionsRepository.GetByIdsAsync(sectionsIds); var tagIds = entities.SelectMany(p => p.TagIds).Distinct().ToArray(); var tags = await _tagsRepository.GetByIdsAsync(tagIds); foreach (var entity in entities) { entity.Sections = sections.Where(s => entity.SectionIds.Contains(s.Id)).ToList(); entity.Tags = tags.Where(t => entity.TagIds.Contains(t.Id)).ToList(); } }
protected override async Task AfterLoadAsync(Post <TUserPk>[] entities) { await base.AfterLoadAsync(entities); var sectionsIds = entities.SelectMany(p => p.SectionIds).Distinct().ToArray(); var sections = await SectionsRepository.GetByIdsAsync(sectionsIds); var tagIds = entities.SelectMany(p => p.TagIds).Distinct().ToArray(); var tags = await _tagsRepository.GetByIdsAsync(tagIds); var userIds = entities.Select(e => e.AuthorId).Distinct().ToArray(); var users = await _userDataProvider.GetDataAsync(userIds); foreach (var entity in entities) { entity.Sections = sections.Where(s => entity.SectionIds.Contains(s.Id)).ToList(); entity.Tags = tags.Where(t => entity.TagIds.Contains(t.Id)).ToList(); entity.Author = users.FirstOrDefault(d => d.Id.Equals(entity.AuthorId)); } }
public async Task PublishOrDeleteAsync(Post <string> post, PropertyChange[] changes) { var sites = await _sitesRepository.GetByIdsAsync(post.SiteIds); foreach (var site in sites) { if (site.Id == GetMainSiteId(post)) { var ipbSettings = await _propertiesProvider.GetAsync <IPBSitePropertiesSet>(site); if (ipbSettings != null && ipbSettings.IsEnabled && ipbSettings.ForumId > 0) { await _ipbContentPublisher.PublishAsync(post, new IPBPublishConfig(ipbSettings.ForumId, post.AuthorId), true, site, true); } } var twitterSettings = await _propertiesProvider.GetAsync <TwitterSitePropertiesSet>(site); if (twitterSettings != null && twitterSettings.IsEnabled) { var hasChanges = changes != null && changes.Any(c => c.Name == nameof(post.Title) || c.Name == nameof(post.Url)); var sections = await _sectionsRepository.GetByIdsAsync(post.SectionIds); var tags = new List <string>(); foreach (var section in sections) { if (section is Developer developer && !string.IsNullOrEmpty(developer.Data.Hashtag)) { tags.Add($"#{developer.Data.Hashtag.Replace("#", "")}"); } if (section is Game game && !string.IsNullOrEmpty(game.Data.Hashtag)) { tags.Add($"#{game.Data.Hashtag.Replace("#", "")}"); } if (section is Topic topic && !string.IsNullOrEmpty(topic.Data.Hashtag)) { tags.Add($"#{topic.Data.Hashtag.Replace("#", "")}"); } } var twitterConfig = new TwitterPublishConfig( new TwitterConfig(twitterSettings.ConsumerKey, twitterSettings.ConsumerSecret, twitterSettings.AccessToken, twitterSettings.AccessTokenSecret), tags); if (hasChanges || !post.IsPublished) { await _twitterContentPublisher.DeleteAsync(post, twitterConfig, site); } if (post.IsPublished) { await _twitterContentPublisher.PublishAsync(post, twitterConfig, hasChanges, site); } } var facebookSettings = await _propertiesProvider.GetAsync <FacebookSitePropertiesSet>(site); if (facebookSettings != null && facebookSettings.IsEnabled) { var hasChanges = changes != null && changes.Any(c => c.Name == nameof(post.Url)); var facebookConfig = new FacebookConfig(new Uri(facebookSettings.ApiUrl), facebookSettings.PageId, facebookSettings.AccessToken); if (hasChanges || !post.IsPublished) { await _facebookContentPublisher.DeleteAsync(post, facebookConfig, site); } if (post.IsPublished) { await _facebookContentPublisher.PublishAsync(post, facebookConfig, hasChanges, site); } } } }