public async Task <Result <IEnumerable <AdDTO> > > GetAds(string userId) { var user = await _context.Users.Where(x => x.Id == Guid.Parse(userId)) .Include(x => x.SkillKnns) .Include("SkillKnns.GlobalString") .FirstOrDefaultAsync(); if (user == null) { return(Result <IEnumerable <AdDTO> > .CreateFailed( HttpStatusCode.NotFound, "User not found")); } var ads = await _context.Ads .Where(x => x.Owner != user && !x.UserAds.Select(y => y.User).Contains(user)) .Include(x => x.UserAds) .Include("UserAds.User") .Include(x => x.AdKnns) .Include(x => x.Owner) .Include("AdKnns.GlobalString") .ToListAsync(); double distance; var topDistances = new List <Tuple <double, Ad> >(); foreach (var ad in ads) { distance = _knnService.GetDistance(ad, user); if (topDistances.Count < 10) { topDistances.Add(new Tuple <double, Ad>(distance, ad)); } else { var max = topDistances.Max(x => x.Item1); var maxItem = topDistances.Where(x => x.Item1 == max).FirstOrDefault(); if (max > distance) { topDistances[topDistances.IndexOf(maxItem)] = new Tuple <double, Ad>(distance, ad); } } } var result = topDistances.Select(x => x.Item2); return(Result <IEnumerable <AdDTO> > .CreateSuccessful(AdDTO.ToAdDTOList(result))); }
public async Task <Result <IEnumerable <AdDTO> > > GetMyAds(string userId) { var user = await _context.Users.Where(x => x.Id == Guid.Parse(userId)) .Include(x => x.SkillKnns) .Include("SkillKnns.GlobalString") .FirstOrDefaultAsync(); if (user == null) { return(Result <IEnumerable <AdDTO> > .CreateFailed( HttpStatusCode.NotFound, "User not found")); } var ads = await _context.Ads .Where(x => x.Owner == user) .Include(x => x.UserAds) .Include("UserAds.User") .Include(x => x.AdKnns) .Include(x => x.Owner) .Include("AdKnns.GlobalString") .ToListAsync(); return(Result <IEnumerable <AdDTO> > .CreateSuccessful(AdDTO.ToAdDTOList(ads))); }