Ejemplo n.º 1
0
        public async Task <IActionResult> CreateGateUsageChart([FromBody] CreateGateUsageChart command)
        {
            command.RequestedBy = HttpContext.User.Identity.Name;

            var result = await _mediator.Send(command);

            return(StatusCodeResult(result));
        }
        public async Task <Result <ChartResponse> > Handle(CreateGateUsageChart request, CancellationToken cancellationToken)
        {
            try
            {
                if (request.From > request.To)
                {
                    return(Result <ChartResponse> .BadRequest("From date cannot be bigger than To"));
                }

                var user = await _userRepository.GetUserByEmail(request.RequestedBy);

                var logs = await _logService.GetAll();

                logs = logs.Where(x => x.UserId == user.Id && x.EventTypeId == 4);

                var data = new Dictionary <string, int>();

                var startDate = request.From;

                while (startDate < request.To)
                {
                    data.Add(startDate.ToString("dd.MM.yyyy"), 0);
                    startDate = startDate.AddDays(1);
                }

                if (!data.ContainsKey(request.To.ToString("dd.MM.yyyy")))
                {
                    data.Add(request.To.ToString("dd.MM.yyyy"), 0);
                }

                foreach (var log in logs)
                {
                    var creationDate = log.CreatedAt.ToString("dd.MM.yyyy");
                    if (data.ContainsKey(creationDate))
                    {
                        data[creationDate]++;
                    }
                }

                var chartResponse = new ChartResponse {
                    ChartData = data
                };

                return(Result <ChartResponse> .Ok(chartResponse));
            }
            catch (Exception e)
            {
                return(Result <ChartResponse> .Failure(e.Message));
            }
        }