예제 #1
0
        public async Task <IActionResult> GetEnters([FromBody] GetEnters request)
        {
            var pagination = HttpContext.Request.Headers["x-pagination"].FirstOrDefault() ?? "{}";

            request.PaginationEntry = JsonConvert.DeserializeObject <PaginationEntry>(pagination);

            var sorting = HttpContext.Request.Headers["x-sorting"].FirstOrDefault() ?? "{}";

            request.Sorting = JsonConvert.DeserializeObject <Sorting>(sorting);

            var filtering = HttpContext.Request.Headers["x-filtering"].FirstOrDefault() ?? "";

            request.Filtering = filtering;

            request.RequestedEmail = HttpContext.User.Identity.Name;

            var result = await _mediator.Send(request);

            return(StatusCodeResult(result));
        }
        public async Task <Result <ListResult <GetEntersResponse> > > Handle(GetEnters request, CancellationToken cancellationToken)
        {
            try
            {
                if (!IsAdminOrAccountAdmin(request.RequestedEmail, request.AccountId))
                {
                    return(Result <ListResult <GetEntersResponse> > .AccessDenied("No access!"));
                }

                var result = await _logService.GetAll();

                var myLogs = result.Where(x =>
                                          x.AccountId == request.AccountId &&
                                          x.EventTypeId == 4 &&
                                          x.Action == "success" &&
                                          x.CreatedAt >= request.From &&
                                          x.CreatedAt <= request.To);

                var listResponse = new List <GetEntersResponse>();

                foreach (var log in myLogs)
                {
                    var res = listResponse.FirstOrDefault(x => x.Email == log.User.Email && x.GateName == log.Gate.Name && x.FirstUse.Date == log.CreatedAt.Date);
                    if (res == null)
                    {
                        listResponse.Add(new GetEntersResponse
                        {
                            Name            = $"{log.User.FirstName} {log.User.LastName}",
                            Email           = log.User.Email,
                            FirstUse        = log.CreatedAt,
                            Date            = log.CreatedAt.Date,
                            GateName        = log.Gate.Name,
                            LastUse         = log.CreatedAt,
                            IsUserOfAccount = await _accountUserRepository.Get(request.AccountId, log.UserId.Value) == null ? false : true
                        });
                    }
                    else
                    {
                        if (res.FirstUse > log.CreatedAt)
                        {
                            res.FirstUse = log.CreatedAt;
                        }
                        if (res.LastUse < log.CreatedAt)
                        {
                            res.LastUse = log.CreatedAt;
                        }
                    }
                }

                if (!String.IsNullOrWhiteSpace(request.Filtering))
                {
                    listResponse = listResponse.Where(x => x.Name.Contains(request.Filtering) || x.Email.Contains(request.Filtering) || x.GateName.Contains(request.Filtering)).ToList();
                }

                var response = new ListResult <GetEntersResponse>(listResponse, listResponse.Count());

                return(Result <ListResult <GetEntersResponse> > .Ok(response));
            }
            catch (Exception e)
            {
                return(Result <ListResult <GetEntersResponse> > .Failure(e.Message));
            }
        }