public async Task <WeedDetectedRecommendation> GetWeedDetectedRecommendation(WeedDetectedMessage message)
        {
            var field = await _fieldRepository.GetAsync(message.FieldId);

            if (field == null)
            {
                Console.WriteLine($"Field {message.FieldId} was not found.");
                return(null);
            }

            var pesticides = (await _pesticideRepository.BrowseAsync(x => true));

            if (pesticides == null)
            {
                Console.WriteLine($"Error while getting pesticides.");
                return(null);
            }

            var weed = await _weedRepository.GetAsync(message.WeedId);

            if (weed == null)
            {
                Console.WriteLine($"Weed {message.FieldId} was not found.");
                return(null);
            }

            if (field.CurrentCrop == null)
            {
                Console.WriteLine("Field is empty. No need to recommend.");
                return(null);
            }

            var currentCulture = await _cultureRepository.GetAsync(field.CurrentCrop.CultureId);

            pesticides = pesticides.Where(x => weed.Pesticides.Any(p => p.PesticideId == x.Id) &&
                                          !x.ComponentsIds.Intersect(currentCulture.ForbiddenComponents).Any());

            var pesticidesWithDose = weed.Pesticides.Where(x => pesticides.Any(p => p.Id == x.PesticideId)).ToList();

            if (pesticidesWithDose.Count == 0)
            {
                Console.WriteLine("Unable to find recommendation");
                return(null);
            }

            return(new WeedDetectedRecommendation()
            {
                Pesticides = pesticidesWithDose
            });
        }
예제 #2
0
 public async Task <WeedDto> GetAsync(Guid id)
 {
     return(_mapper.Map <WeedDto>(await _repository.GetAsync(id)));
 }