public async Task <IHttpActionResult> HandleUserQuery(string query) { var cognitiveService = new CognitiveService(); var luisResponse = await cognitiveService.GetUserIntent(query); switch (luisResponse.UserIntent) { case UserIntent.SuggestSeries: var recommendedSeries = await cognitiveService.GetRecommendedSeries(); return(Ok(new SuggestSeriesResult { Payload = recommendedSeries })); case UserIntent.GetNextEpisode: var title = luisResponse.Entities.FirstOrDefault(); var tvShows = await this.unitOfWork.TvShowRepository.SearchTitle(title); var tvShow = tvShows.OrderByDescending(t => t.Title.Length).FirstOrDefault(t => query.ToLower().Contains(t.Title.ToLower())); if (tvShow == null) { throw new EntityNotFoundException($"Could not find series {title}"); } var nextEpisode = await this.unitOfWork.EpisodeRepository.GetNextEpisode(tvShow); return(Ok(new NextEpisodeResult { Payload = nextEpisode })); case UserIntent.None: throw new BusinessLogicException("Sorry, I cannot answer your question."); default: throw new NotImplementedException(); } }