コード例 #1
0
 protected override PagedResponse <NewsArticleModel> GetNews(int pageIndex, SportKind sportKind)
 {
     return(NewsService
            .GetPopularNews(DateTimeOffset.Now.AddDays(-1),
                            new PagedRequest(NewsPerPage, pageIndex),
                            sportKind));
 }
コード例 #2
0
ファイル: NewsScene.cs プロジェクト: alexvolchetsky/sports
        protected string GetSportKindText(string value, SportKind sportKind)
        {
            string sportKindText = sportKind switch
            {
                SportKind.Football => "футбола",
                SportKind.Basketball => "баскетбола",
                SportKind.Hockey => "хоккея",
                _ => string.Empty,
            };

            return(string.Join(' ', value, sportKindText));
        }
コード例 #3
0
        public IQueryable <NewsArticle> GetPopularNews(
            DateTimeOffset fromDate, SportKind sportKind = SportKind.Undefined)
        {
            var date = fromDate.UtcDateTime;
            IQueryable <NewsArticle> query = _sportsContext.NewsArticles;

            if (sportKind != SportKind.Undefined && sportKind != SportKind.All)
            {
                query = query.Where(x => x.SportKind == sportKind);
            }
            return(query
                   .Where(x => x.PublishedDate >= date)
                   .OrderByDescending(x => x.CommentsCount));
        }
コード例 #4
0
ファイル: SyncService.cs プロジェクト: alexvolchetsky/sports
        private static void MapSportKind(NewsArticleInfo from, NewsArticle to)
        {
            SportKind sportKind = SportKind.Undefined;

            if (from.Section != null)
            {
                string webname = from.Section.WebName;
                sportKind = webname switch
                {
                    "football" => SportKind.Football,
                    "hockey" => SportKind.Hockey,
                    "basketball" => SportKind.Basketball,
                    _ => SportKind.Other,
                };
            }
            to.SportKind = sportKind;
        }
コード例 #5
0
ファイル: NewsScene.cs プロジェクト: alexvolchetsky/sports
        private SportKind GetSportKind(SportsRequest sportsRequest)
        {
            SportKind sportKind = SportKind.Undefined;

            if (sportsRequest.Request.Nlu.Intents != null &&
                sportsRequest.Request.Nlu.Intents.Read != null &&
                sportsRequest.Request.Nlu.Intents.Read.Slots.Sport != null &&
                sportsRequest.Request.Nlu.Intents.Read.Slots.Sport.Value != SportKind.Undefined)
            {
                sportKind = sportsRequest.Request.Nlu.Intents.Read.Slots.Sport.Value;
            }
            else if (sportsRequest.State.Session != null &&
                     sportsRequest.State.Session.CurrentScene == SceneType &&
                     sportsRequest.State.Session.SportKind != SportKind.Undefined)
            {
                sportKind = sportsRequest.State.Session.SportKind;
            }
            return(sportKind);
        }
コード例 #6
0
ファイル: NewsScene.cs プロジェクト: alexvolchetsky/sports
        public override IAliceResponseBase Reply(SportsRequest sportsRequest)
        {
            SportKind sportKind    = GetSportKind(sportsRequest);
            int       pageIndex    = GetPageIndex(sportsRequest);
            var       newsResponse = GetNews(pageIndex, sportKind);
            int       maxPageIndex = (int)Math.Ceiling(newsResponse.Total / (float)NewsPerPage) - 1;

            var buttons = new List <AliceButtonModel>();

            if (pageIndex > 0)
            {
                buttons.Add(new SportsButtonModel("назад"));
            }
            if (pageIndex >= 0 && pageIndex < maxPageIndex)
            {
                buttons.Add(new SportsButtonModel("вперед"));
            }
            buttons.AddRange(Buttons);

            var news = newsResponse.Items;

            if (news.Any())
            {
                var    titles    = news.Select(x => x.Title);
                string headerTts = GetSportKindText(HeaderTts, sportKind);
                string text      = $"{headerTts}\n\n{string.Join("\n\n", titles)}";
                string tts       = $"{headerTts}{AliceHelper.SilenceString500}{string.Join(AliceHelper.SilenceString500, titles)}{AliceHelper.SilenceString1000}{Sports_Resources.Tips_Help}";
                var    response  = new SportsGalleryResponse(sportsRequest, text, tts, buttons);
                response.Response.Card = new AliceGalleryCardModel
                {
                    Items  = new List <AliceGalleryCardItem>(),
                    Header = new AliceGalleryCardHeaderModel(GetSportKindText(HeaderText, sportKind))
                };
                foreach (var newsArticle in news)
                {
                    response.Response.Card.Items.Add(new AliceGalleryCardItem()
                    {
                        Title = AliceHelper
                                .PrepareGalleryCardItemTitle(newsArticle.Title, GetTitleEnding(newsArticle), AliceHelper.DefaultReducedStringEnding),
                        Button = new AliceImageCardButtonModel()
                        {
                            Url = newsArticle.Url
                        }
                    });
                }
                response.Response.Buttons.AddRange(new List <AliceButtonModel>()
                {
                    new AliceButtonModel("футбол"),
                    new AliceButtonModel("хоккей"),
                    new AliceButtonModel("баскетбол"),
                    new AliceButtonModel("все")
                });
                response.SessionState.PageIndex    = pageIndex;
                response.SessionState.SportKind    = sportKind;
                response.SessionState.CurrentScene = SceneType;
                return(response);
            }
            else
            {
                var response = new SportsResponse(sportsRequest, NoNewsText, buttons);
                response.SessionState.CurrentScene = SceneType;
                return(response);
            }
        }
コード例 #7
0
ファイル: NewsScene.cs プロジェクト: alexvolchetsky/sports
 protected abstract PagedResponse <NewsArticleModel> GetNews(int pageIndex, SportKind sportKind);
コード例 #8
0
 protected override PagedResponse <NewsArticleModel> GetNews(int pageIndex, SportKind sportKind)
 {
     return(NewsService
            .GetLatestNews(new PagedRequest(NewsPerPage, pageIndex), sportKind));
 }
コード例 #9
0
        public PagedResponse <NewsArticleModel> GetPopularNews(DateTimeOffset fromDate, PagedRequest pagedRequest, SportKind sportKind = SportKind.Undefined)
        {
            var popularNewsQuery = _newsDataService.GetPopularNews(fromDate, sportKind);
            var totalCount       = popularNewsQuery.Count();
            var popularNews      = popularNewsQuery
                                   .Skip(pagedRequest.PageIndex * pagedRequest.PageSize)
                                   .Take(pagedRequest.PageSize)
                                   .Select(x => new NewsArticleModel()
            {
                Id            = x.NewsArticleId,
                Title         = x.Title,
                Url           = x.Url,
                CommentsCount = x.CommentsCount,
                IsHotContent  = x.IsHotContent,
                ExternalId    = x.ExternalId
            })
                                   .ToArray();
            var results = new PagedResponse <NewsArticleModel>(popularNews, totalCount);

            return(results);
        }
コード例 #10
0
        public PagedResponse <NewsArticleModel> GetLatestNews(PagedRequest pagedRequest, SportKind sportKind = SportKind.Undefined)
        {
            IQueryable <NewsArticle> query = _sportsContext.NewsArticles;

            if (sportKind != SportKind.Undefined && sportKind != SportKind.All)
            {
                query = query.Where(x => x.SportKind == sportKind);
            }
            query = query
                    .OrderByDescending(x => x.PublishedDate);

            int totalCount = query.Count();

            var latestNews = query
                             .Skip(pagedRequest.PageIndex * pagedRequest.PageSize)
                             .Take(pagedRequest.PageSize)
                             .Select(x => new NewsArticleModel()
            {
                Title         = x.Title,
                Url           = x.Url,
                CommentsCount = x.CommentsCount,
                IsHotContent  = x.IsHotContent
            })
                             .ToArray();
            var result = new PagedResponse <NewsArticleModel>(latestNews, totalCount);

            return(result);
        }