public Task <IEnumerable <AttendedModalityViewModel> > Handle(FindProviderAttendedModalitiesQuery request, CancellationToken cancellationToken) { var res = _attendedModalityRepository .Query(x => x.ProviderUserId == request.ProviderId) .Include(x => x.Modality) .ProjectTo <AttendedModalityViewModel>(_mapper.ConfigurationProvider) .AsEnumerable(); return(Task.FromResult(res)); }
public async Task <IEnumerable <AttendedModalityProviderViewModel> > Handle(FindAttendedModalitiesByTypeQuery request, CancellationToken cancellationToken) { var distService = new DistanceService(); var locationData = await _userRepository.Query() .Where(x => x.Id == _userAccessor.UserId) .Select(x => new { x.KiloMetersSearchRadius, x.Longitude, x.Latitude }) .FirstOrDefaultAsync(); var query = await _attendedModalityRepository.Query() .Include(x => x.Modality) .Include(x => x.Provider) .Where(x => x.Modality.Key == request.Key) .Select(x => new AttendedModalityProviderViewModel { Id = x.Id, BasicValue = x.BasicValue, Method = x.Method, ProviderName = x.Provider.Name, ProviderRate = x.Provider.CurrentRating, MultiplyByEmployeesNumber = x.MultiplyByEmployeesNumber, ProviderUserId = x.Provider.Id, Latitude = x.Provider.Latitude, Longitude = x.Provider.Longitude }).ToListAsync(); var userPoint = new GeoPoint(locationData.Latitude, locationData.Longitude); var result = query .Select(x => { x.ProviderRate = Math.Round(x.ProviderRate, MidpointRounding.AwayFromZero); x.Distance = distService.GetDistanceBetweenTwoPointsInKms(new GeoPoint(x.Latitude, x.Longitude), userPoint); return(x); }) .Where(x => x.Distance <= locationData.KiloMetersSearchRadius) .OrderByDescending(x => x.ProviderRate).ThenBy(x => x.Distance); return(result); }