Пример #1
0
        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)));
        }
Пример #2
0
        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)));
        }