public async Task <IReadOnlyCollection <IPostingService> > GetServices(Publication publication) { var categoryId = publication.CategoryId; var telegramChannels = await _socialRepository.GetTelegramChannels(categoryId); var facebookPages = await _socialRepository.GetFacebookPages(categoryId); var twitterAccounts = await _socialRepository.GetTwitterAccounts(); var slackApplications = await _socialRepository.GetSlackApplications(); var services = new List <IPostingService>(); foreach (var telegramChannel in telegramChannels) { services.Add(_factory.CreateTelegramService( telegramChannel.Token, telegramChannel.Name)); } foreach (var facebookPage in facebookPages) { services.Add(_factory.CreateFacebookService( facebookPage.Token, facebookPage.Name)); } foreach (var twitterAccount in twitterAccounts) { services.Add(_factory.CreateTwitterService( twitterAccount.ConsumerKey, twitterAccount.ConsumerSecret, twitterAccount.AccessToken, twitterAccount.AccessTokenSecret, twitterAccount.Name, await _publicationService.GetCategoryTags(categoryId))); } foreach (var slack in slackApplications) { services.Add(_factory.CreateSlackService(slack.WebHookUrl)); } return(services.ToImmutableList()); }