public async Task <Pager <LogDto> > GetLogPager(LogFilterDto filter) { var sortby = "Logged"; Expression <Func <LogEntity, bool> > where = x => (true) && (string.IsNullOrEmpty(filter.Search) || x.Message.ToLower().Contains(filter.Search.ToLower())) && (!string.IsNullOrEmpty(x.UserName)) ; var tuple = await _logManager.Pager <LogEntity>(where, sortby, filter.Start, filter.Length); var list = tuple.Item1; var count = tuple.Item2; if (count == 0) { return(new Pager <LogDto>(new List <LogDto>(), 0, filter.Start, filter.Length)); } var page = (filter.Start + filter.Length) / filter.Length; var result = _mapper.Map <List <LogDto> >(list); return(new Pager <LogDto>(result, count, page, filter.Start)); }
public async Task <SelectPaginatedResponse <LogEntity> > SelectPaginated(LogFilterDto filter, int pageNumber, int pageSize) { var query = ""; try { query = $@"SELECT * FROM public.""Log"" WHERE ""Ip"" like '%{filter.Ip}%' AND ""UserAgent"" like '%{filter.UserAgent}%'"; if (filter.Hour != null) { query += $@" AND extract(hour from ""Date"") = {filter.Hour}"; } if (filter.Order != null) { query += $@" ORDER BY ""{filter.Order}"" {filter.Direction}"; } query += $@" OFFSET {(pageNumber -1) * pageSize} ROWS FETCH NEXT {pageSize} ROWS ONLY" ; var countQuery = $@"SELECT count(*) FROM public.""Log"" WHERE ""Ip"" like '%{filter.Ip}%' AND ""UserAgent"" like '%{filter.UserAgent}%'"; if (filter.Hour != null) { countQuery += $@" AND extract(hour from ""Date"") = {filter.Hour}"; } var result = new SelectPaginatedResponse <LogEntity> { Obj = await _unitOfWork.DbConnection.QueryAsync <LogEntity>(query), Count = (await _unitOfWork.DbConnection.QueryAsync <int>(countQuery)).First() }; return(result); } catch (Exception e) { _logger.LogError(e, "Pagination failed for query = {$Query}", query); throw; } }
public async Task SelectPaginated() { // Arrange var logFilterDto = new LogFilterDto(); _logService.Setup(a => a.SelectPaginated(logFilterDto, 0, 0)) .ReturnsAsync(new SelectPaginatedResponse <LogEntity>()); // Act var controller = new LogController(_logger.Object, _logService.Object); var result = await controller.SelectPaginated(logFilterDto, 0, 0); // Assert Assert.IsType <OkObjectResult>(result.Result); }
public async Task SelectPaginated() { // Arrange var logFilter = new LogFilterDto(); _logRepository.Setup(a => a.SelectPaginated(logFilter, 0, 0)) .ReturnsAsync(new SelectPaginatedResponse <LogEntity>()); // Act var service = new LogService(_logger.Object, _logRepository.Object); var result = await service.SelectPaginated(logFilter, 0, 0); // Assert Assert.NotNull(result); }
public async Task <ActionResult <IEnumerable <LogEntity> > > SelectPaginated([FromBody] LogFilterDto filter, int page, int pageSize) { try { var result = await _logService.SelectPaginated(filter, page, pageSize); return(Ok(result)); } catch (Exception e) { _logger.LogError(e, "Log pagination failed for filters={@Filter}, page={$Page} and page size={$PageSize}", filter, page, pageSize); return(BadRequest("Unable to get data. If problem persists, contact an administrator")); } }
public async Task <SelectPaginatedResponse <LogEntity> > SelectPaginated(LogFilterDto filter, int pageNumber, int pageSize) { try { var result = await _logRepository.SelectPaginated(filter, pageNumber, pageSize); return(result); } catch (Exception e) { _logger.LogError(e, "Pagination failed for filter = {@Filter}, page number = {$PageNumber} and page size = {$PageSize}", filter, pageNumber, pageSize); throw; } }