public IActionResult GetPassengersByHoursByRoutes(DateTime selectedDate, [FromQuery] int[] selectedRoutesId)
        {
            log.Info(nameof(MetricsController.GetPassengersByHoursByRoutes));

            try
            {
                ChartTableDto chartDtoTicketsByTicketTypes = metricsService.PassengersByHoursByRoutes(selectedDate, selectedRoutesId);

                return(Json(chartDtoTicketsByTicketTypes));
            }
            catch (Exception e)
            {
                log.Error(e);

                return(BadRequest());
            }
        }
        public ChartTableDto PassengersByHoursByRoutes(DateTime selectedDay, int[] selectedRoutesId)
        {
            var chartData = uow.TicketVerifications.GetAll()
                            .Include(t => t.Transport)
                            .ThenInclude(r => r.Route)
                            .Where(t => t.IsVerified && t.VerificationUTCDate.Date == selectedDay.Date &&
                                   (selectedRoutesId.Length == 0 || selectedRoutesId.Contains(t.Transport.RouteId)))
                            .GroupBy(x => new { x.Transport.Route.Number, x.VerificationUTCDate.Hour })
                            .Select(g => new { g.Key.Number, g.Key.Hour, PassengersCount = g.Count() })
                            .OrderBy(t => t.Number)
                            .ToList();

            var maxPassengers = chartData.Max(m => m.PassengersCount);
            var routesCount   = chartData.GroupBy(t => t.Number).Count();

            ChartTableDto chartTableDto = new ChartTableDto
            {
                MaxPassengersByRoute = maxPassengers,
                Data = new string[HoursInDay, routesCount]
            };

            var labels = chartData.Select(t => t.Number).Distinct();

            chartTableDto.Labels = labels.ToList();

            for (int i = 0; i < HoursInDay; i++)
            {
                var temp = chartData.Where(t => t.Hour == i);

                foreach (var item in temp)
                {
                    var j = chartTableDto.Labels.IndexOf(item.Number);
                    chartTableDto.Data[i, j] = item.PassengersCount.ToString();
                }
            }

            return(chartTableDto);
        }