示例#1
0
        /// <summary>
        /// Retrieves a list of all awards.
        /// </summary>
        /// <returns></returns>
        public Task <AwardResponse> Create(Award award)
        {
            if (award == null)
            {
                throw new ArgumentNullException(nameof(award));
            }

            var request = new AwardRequest(award);

            return(this.m_httpClient.Post <AwardResponse>(request, ENDPOINT));
        }
示例#2
0
        public async Task GetAwardsLimitOffsetTest()
        {
            var dbContext = _serviceProvider.GetRequiredService <BookContext>();

            await CreateSampleTask(dbContext);

            var service = new AwardsService(dbContext);

            AwardRequest request = new AwardRequest {
                Sort = AwardSort.Id, Limit = 1, Offset = 1
            };
            var response = await service.GetAwardsAsync(request);

            Assert.NotNull(response);
            Assert.Equal(1, response.Values.Count);
            Assert.Equal(2, response.Values[0].AwardId);
            Assert.Equal("Hugo", response.Values[0].Name);
        }
示例#3
0
        public async Task GetAwardsSortRusnameTest()
        {
            var dbContext = _serviceProvider.GetRequiredService <BookContext>();

            await CreateSampleTask(dbContext);

            var service = new AwardsService(dbContext);

            AwardRequest request = new AwardRequest {
                Sort = AwardSort.Rusname
            };
            var response = await service.GetAwardsAsync(request);

            Assert.NotNull(response);
            Assert.Equal(3, response.Values.Count);
            Assert.Equal("Nebula", response.Values[0].Name);
            Assert.Equal("Oscar", response.Values[1].Name);
            Assert.Equal("Hugo", response.Values[2].Name);
        }
示例#4
0
        public async Task GetAwardsTest()
        {
            var dbContext = _serviceProvider.GetRequiredService <BookContext>();

            await CreateSampleTask(dbContext);

            var service = new AwardsService(dbContext);

            AwardRequest request = new AwardRequest {
                Sort = AwardSort.Id
            };
            var response = await service.GetAwardsAsync(request);

            Assert.NotNull(response);
            Assert.Equal(3, response.Values.Count);
            Assert.Equal(1, response.Values[0].AwardId);
            Assert.Equal("Nebula", response.Values[0].Name);

            Assert.NotNull(response.Values[0].FirstContestDate);
            //Assert.Equal(1992, response[0].FirstContestDate.Value.Year);
            Assert.NotNull(response.Values[0].LastContestDate);
            //Assert.Equal(2015, response[0].LastContestDate.Value.Year);
        }
示例#5
0
        public async Task <IActionResult> Index(AwardRequest request)
        {
            var awards = await _awardsService.GetAwardsAsync(request);

            return(this.PageObject(awards.Values, awards.TotalRows, request.Limit, request.Offset));
        }
示例#6
0
        // TODO: add nominationsCount and contestsCount
        public async Task <ApiObject <AwardResponse> > GetAwardsAsync(AwardRequest request)
        {
            var query = from a in _bookContext.Awards
                        join l in _bookContext.Languages on a.LanguageId equals l.Id
                        join c in _bookContext.Countries on a.CountryId equals c.Id
                        select new AwardResponse
            {
                AwardId           = a.Id,
                RusName           = a.RusName,
                Name              = a.Name,
                Homepage          = a.Homepage,
                Description       = a.Description,
                DescriptionSource = a.DescriptionSource,
                Notes             = a.Notes,
                AwardClosed       = a.AwardClosed,
                IsOpened          = a.IsOpened,
                LanguageId        = l.Id,
                LanguageName      = l.Name,
                CountryId         = c.Id,
                CountryName       = c.Name
            };

            if (request.IsOpened)
            {
                query = query.Where(a => a.IsOpened);
            }

            switch (request.Sort)
            {
            case AwardSort.Id:
                query = query.OrderBy(c => c.AwardId).ThenBy(c => c.RusName);;
                break;

            case AwardSort.Rusname:
                query = query.OrderBy(c => c.RusName);
                break;

            case AwardSort.Language:
                query = query.OrderBy(c => c.LanguageName).ThenBy(c => c.RusName);
                break;

            case AwardSort.Country:
                query = query.OrderBy(c => c.CountryName).ThenBy(c => c.RusName);
                break;
            }

            if (request.Offset > 0)
            {
                query = query.Skip(request.Offset);
            }

            if (request.Limit > 0)
            {
                query = query.Take(request.Limit);
            }

            var queryResults = await query.ToListAsync();

            // TODO: GroupBy is not translating into SQL
            var awardsIds = queryResults.Select(c => c.AwardId).ToList();
            var awardFirstLastContests = (from c in _bookContext.Contests
                                          where awardsIds.Contains(c.AwardId)
                                          group c by c.AwardId into g
                                          select new
            {
                AwardId = g.Key,
                FirstContestDate = g.Min(d => d.Date),
                LastContestDate = g.Max(d => d.Date)
            }).ToList();

            foreach (var queryResult in queryResults)
            {
                queryResult.FirstContestDate = awardFirstLastContests
                                               .Where(c => c.AwardId == queryResult.AwardId)
                                               .Select(c => c.FirstContestDate)
                                               .SingleOrDefault();
                queryResult.LastContestDate = awardFirstLastContests
                                              .Where(c => c.AwardId == queryResult.AwardId)
                                              .Select(c => c.LastContestDate)
                                              .SingleOrDefault();
            }

            var result = new ApiObject <AwardResponse>();

            result.Values    = queryResults;
            result.TotalRows = request.IsOpened
                ? await _bookContext.Awards.CountAsync(a => a.IsOpened)
                : await _bookContext.Awards.CountAsync();

            return(result);
        }