public async Task <IActionResult> Post(string ids) { var feedIds = ids.Split(',', StringSplitOptions.RemoveEmptyEntries).Select(s => Convert.ToInt32(s)).ToArray(); var request = new GetFeedsRequest() { Ids = feedIds }; var options = await _mediator.Send(request); return(Ok(options)); }
public async Task <List <Feed> > Handle(GetFeedsRequest request) { var feedOptions = _feedOptionsStore.GetFeedOptions(); var rssTasks = new List <Task <List <SyndicationItem> > >(); foreach (var id in request.Ids) { var option = feedOptions.FirstOrDefault(f => f.Id == id); if (option == null) { continue; } var task = _rssReader.GetItems(option.Url); rssTasks.Add(task); } await Task.WhenAll(rssTasks); var rssItems = new List <SyndicationItem>(); foreach (var completedTask in rssTasks) { rssItems.AddRange(completedTask.Result); } return(rssItems .OrderBy(o => o.Published) .Select(s => new Feed { Title = s.Title, Description = s.Description }) .ToList()); }