public async Task <IActionResult> GetAggregatedCourseDemandList([FromRoute] int ukprn, int?courseId, string location, int?locationRadius, [FromQuery] List <string> routes)
        {
            try
            {
                var result = await _mediator.Send(new GetAggregatedCourseDemandListQuery
                {
                    Ukprn          = ukprn,
                    CourseId       = courseId,
                    LocationName   = location,
                    LocationRadius = locationRadius,
                    Routes         = routes
                });

                var apiResponse = new GetAggregatedCourseDemandListResponse
                {
                    TrainingCourses         = result.Courses.Select(item => (GetCourseListItem)item),
                    AggregatedCourseDemands = result.AggregatedCourseDemands.Select(response => (GetAggregatedCourseDemandSummary)response),
                    Total         = result.Total,
                    TotalFiltered = result.TotalFiltered,
                    Location      = result.LocationItem,
                    Routes        = result.Routes.Select(c => (GetRoutesListItem)c).ToList()
                };

                return(Ok(apiResponse));
            }
            catch (Exception e)
            {
                _logger.LogError(e, $"Error getting aggregated demand list for ukprn:[{ukprn}], courseId:[{courseId}], location:[{location}]");
                return(BadRequest());
            }
        }
 public async Task Then_Gets_Demands_And_Courses_From_Apis_And_Adds_Courses_To_Cache(
     GetAggregatedCourseDemandListQuery query,
     GetStandardsListResponse coursesApiResponse,
     GetAggregatedCourseDemandListResponse demandApiResponse,
     [Frozen] Mock <ICoursesApiClient <CoursesApiConfiguration> > mockCoursesApi,
     [Frozen] Mock <IEmployerDemandApiClient <EmployerDemandApiConfiguration> > mockDemandApi,
     [Frozen] Mock <ILocationLookupService> mockLocationLookup,
     [Frozen] Mock <ICacheStorageService> cacheStorageService,
     GetAggregatedCourseDemandListQueryHandler handler)
 {
     query.LocationName   = null;
     query.LocationRadius = null;
     cacheStorageService
     .Setup(client => client.RetrieveFromCache <GetStandardsListResponse>(nameof(GetStandardsListResponse)))
     .ReturnsAsync((GetStandardsListResponse)null);
     mockLocationLookup
     .Setup(service => service.GetLocationInformation(null, default, default))
        public async Task <IActionResult> GetAggregatedCourseDemandList(int ukprn, [FromQuery] int?courseId, [FromQuery] double?lat, [FromQuery] double?lon, [FromQuery] int?radius)
        {
            var resultFromMediator = await _mediator.Send(new GetAggregatedCourseDemandListQuery
            {
                Ukprn    = ukprn,
                Lat      = lat,
                Lon      = lon,
                Radius   = radius,
                CourseId = courseId
            });

            var getAggregatedCourseDemandSummaryResponses = resultFromMediator.AggregatedCourseDemandList.Select(summary =>
                                                                                                                 (GetAggregatedCourseDemandSummaryResponse)summary).ToList();
            var response = new GetAggregatedCourseDemandListResponse
            {
                AggregatedCourseDemandList = getAggregatedCourseDemandSummaryResponses,
                TotalFiltered = getAggregatedCourseDemandSummaryResponses.Count,
                Total         = resultFromMediator.Total
            };

            return(Ok(response));
        }