예제 #1
0
        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));
        }
예제 #2
0
        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);
        }