public async Task <ChartListDto> GetChartData(ChartRequestDto request) { var transformedGroup = TransformDateRange(request.Granuality, request.DateRange); var resultChartElements = GroupAndSumGateUsagesByDateRange(transformedGroup, await GetData(request), request.Granuality); return(new ChartListDto { UserId = request.UserId, Granuality = request.Granuality, Type = request.Type, Elements = resultChartElements }); }
public async Task <ServiceResult <ChartListDto> > GetDataAsync(ChartRequestDto request) { switch (request.Type) { case ChartType.GateOpenings: return(ServiceResult <ChartListDto> .Success(await _gateUsagesChartDataProvider.GetChartData(request))); case ChartType.Orders: return(ServiceResult <ChartListDto> .Success(await _ordersChartDataProvider.GetChartData(request))); default: throw new ArgumentOutOfRangeException(); } }
public async Task <ServiceResult <Dictionary <ChartType, ChartListDto>, ChartRequestDto> > GetDefaultDataAsync(int userId) { var chartRequest = new ChartRequestDto(DateTime.Today.AddDays(-6), DateTime.Today.AddDays(1).AddSeconds(-1), ChartType.GateOpenings, ChartGranuality.PerDay, userId); var gateOpeningsData = await GetDataAsync(chartRequest); chartRequest.Type = ChartType.Orders; var orderData = await GetDataAsync(chartRequest); var resultDictionary = new Dictionary <ChartType, ChartListDto>() { { ChartType.GateOpenings, gateOpeningsData.IsValid ? gateOpeningsData.Result : new ChartListDto() }, { ChartType.Orders, orderData.IsValid ? orderData.Result : new ChartListDto() } }; return(ServiceResult <Dictionary <ChartType, ChartListDto>, ChartRequestDto> .Success(resultDictionary, chartRequest)); }
protected abstract Task <Dictionary <DateTime, int> > GetData(ChartRequestDto request);
protected override async Task <Dictionary <DateTime, int> > GetData(ChartRequestDto request) { var orders = await _ordersRepository.GetAllAsync(x => x.UserId == request.UserId && x.Date >= request.DateRange.StartDate && x.Date <= request.DateRange.EndDate); return(orders.GroupBy(x => x.Date.Date).ToDictionary(x => x.Key, x => x.Count())); }