private string CreateOperationLogsResourceUri(OperationLogDtoParameters parameters, ResourceUriType type) { switch (type) { case ResourceUriType.PreviousPage: return(Url.Link(nameof(GetUserOperationLogs), new { StartDateTime = parameters.StartDateTime, EndDateTime = parameters.EndDateTime, PageNumber = parameters.PageNumber - 1, PageSize = parameters.PageSize })); case ResourceUriType.NextPage: return(Url.Link(nameof(GetUserOperationLogs), new { StartDateTime = parameters.StartDateTime, EndDateTime = parameters.EndDateTime, PageNumber = parameters.PageNumber + 1, PageSize = parameters.PageSize })); default: return(Url.Link(nameof(GetUserOperationLogs), new { StartDateTime = parameters.StartDateTime, EndDateTime = parameters.EndDateTime, PageNumber = parameters.PageNumber, PageSize = parameters.PageSize })); } }
public async Task <ActionResult <IEnumerable <OperationLogDto> > > GetUserOperationLogs(int userId, [FromQuery] OperationLogDtoParameters parameters) { var logs = await _userRepository.GetUserOperationLogAsync(userId, parameters); var previousPageLink = logs.HasPrevious ? CreateOperationLogsResourceUri(parameters, ResourceUriType.PreviousPage) : null; var nextPageLink = logs.HasNext ? CreateOperationLogsResourceUri(parameters, ResourceUriType.NextPage) : null; var paginationMetaData = new { CurrentPage = logs.CurrentPage, PageSize = logs.PageSize, TotalCount = logs.TotalCount, TotalPages = logs.TotalPages, PreviousPageLink = previousPageLink, NextPageLink = nextPageLink }; if (logs.Count != 0) { Response.Headers.Add("X-Paginaion", JsonSerializer.Serialize(paginationMetaData, new JsonSerializerOptions { Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping, PropertyNamingPolicy = null })); } var result = _mapper.Map <IEnumerable <OperationLogDto> >(logs); return(Ok(result)); }
public async Task <PagedList <OperationLogResult> > GetUserOperationLogAsync(int userId, OperationLogDtoParameters parameters) { if (parameters == null) { throw new ArgumentNullException(nameof(parameters)); } RefAsync <int> totalNumber = 0; var logs = await _dbContext.Db.Queryable <KzLog, KzLogDetail, KzUser>((l, d, u) => new object[] { JoinType.Left, l.DetailId == d.DetailId, JoinType.Left, l.UserId == u.UserId }).Where((l, d, u) => l.UserId == userId && l.OperationTime > parameters.StartDateTime && l.OperationTime < parameters.EndDateTime) .Select((l, d, u) => new OperationLogResult { UserId = l.UserId, Username = u.Username, Module = l.Module, LogType = l.LogType, OperationTime = l.OperationTime, IPAddress = l.IPAddress, Details = d.Details }) .ToPageListAsync(parameters.PageNumber, parameters.PageSize, totalNumber); return(new PagedList <OperationLogResult>(logs, (int)totalNumber, parameters.PageNumber, parameters.PageSize)); }