/// <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)); }
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); }
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); }
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); }
public async Task <IActionResult> Index(AwardRequest request) { var awards = await _awardsService.GetAwardsAsync(request); return(this.PageObject(awards.Values, awards.TotalRows, request.Limit, request.Offset)); }
// 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); }