public async Task <IActionResult> List(SampleSearchViewModel search) { try { var viewModel = await _sampleService.List(search); return(Ok(new { SampleList = viewModel.List, viewModel.Search.TotalPage })); } catch (Exception ex) { _logger.LogError(ex, ex.Message); return(StatusCode(500, ex.Message)); } }
public async Task ListTest() { try { var search = new SampleSearchViewModel(); var result = await _sampleService.List(search); } catch (Exception e) { Assert.Fail(e.Message); } Assert.Pass(); }
public async Task <SampleListViewModel> List(SampleSearchViewModel search) { var filter = Builders <SampleModel> .Filter.Where(q => q.Status == Status.Active); if (search.Id.HasValue) { filter &= Builders <SampleModel> .Filter.Where(q => q.Id == search.Id.Value); } if (!string.IsNullOrEmpty(search.Title)) { filter &= Builders <SampleModel> .Filter.Where(q => q.Title.Contains(search.Title)); } if (search.CreateFrom.HasValue) { var createFromDateTime = search.CreateFrom.ToDateTimeFromUnix(); filter &= Builders <SampleModel> .Filter.Where(q => q.CreateDate >= createFromDateTime); } if (search.CreateTo.HasValue) { var createToDateTime = search.CreateFrom.ToDateTimeFromUnix(); filter &= Builders <SampleModel> .Filter.Where(q => q.CreateDate <= createToDateTime); } var sort = search.OrderBy switch { "Id" => search.Order == SortOrder.Descending ? Builders <SampleModel> .Sort.Descending(q => q.Id) : Builders <SampleModel> .Sort.Ascending(q => q.Id), "CreateDate" => search.Order == SortOrder.Descending ? Builders <SampleModel> .Sort.Descending(q => q.CreateDate) : Builders <SampleModel> .Sort.Ascending(q => q.CreateDate), _ => Builders <SampleModel> .Sort.Descending(x => x.Id) }; var offset = (search.PageNumber - 1) * search.PageSize; var list = await _mongoDbContext.Sample .Find(filter) .Sort(sort) .Skip(offset) .Limit(search.PageSize) .ToListAsync(); search.Total = await _mongoDbContext.Sample.Find(filter).CountDocumentsAsync(); search.TotalPage = (int)Math.Ceiling((decimal)search.Total / search.PageSize); var viewModel = new SampleListViewModel { Search = search, List = list.Select(q => new SampleViewModel { Id = q.Id, Title = q.Title }).ToList() }; viewModel.Search.Total = search.Total; viewModel.Search.TotalPage = search.TotalPage; viewModel.Search.PageNumber = search.PageNumber; viewModel.Search.PageSize = search.PageSize; return(viewModel); }