Example #1
0
        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
                }));
            }
        }
Example #2
0
        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));
        }