public async Task <ActionResult <CoachSearch> > GetCoachResponse() { var coaches = await _coachService.ListAsync(); var resources = _mapper.Map <IEnumerable <Coach>, IEnumerable <CoachResource> >(coaches); var response = new CoachSearch(); response.number = resources.Count(); response.results = resources.ToArray(); return(response); }
public async Task <HttpResult> Search([FromBody] CoachSearch q) { try { int takeAmount = 15; int pageNum = q.Page; string k = q.Keywords.ToLower().Trim(); List <string> queryWords = k.Replace(',', ' ').Split(' ').Where(x => x.Length > 0).ToList(); var coaches = (from u in db.User //let citySearch = city.Id > 0 where ( u.IsCoach == 1 && (u.Status == q.Status || q.Status == (int)Enums.UserStatus.Active) && ( string.IsNullOrEmpty(k) || queryWords.Any(w => u.FirstName.ToLower().Contains(w)) || queryWords.Any(w => u.LastName.ToLower().Contains(w)) || queryWords.Any(w => u.CityName.ToLower().Contains(w)) || queryWords.Any(w => u.CountryName.ToLower().Contains(w)) || queryWords.All(w => u.CoachBio.ToLower().Contains(w)) ) && (u.IsVerified == q.IsVerfied || q.IsVerfied != 1) && (u.CoachBodybuilding == q.CoachBodybuilding || q.CoachBodybuilding != 1) && (u.CoachClasses == q.CoachClasses || q.CoachClasses != 1) && (u.CoachCrossfit == q.CoachCrossfit || q.CoachCrossfit != 1) && (u.CoachDance == q.CoachDance || q.CoachDance != 1) && (u.CoachMasseuse == q.CoachMasseuse || q.CoachMasseuse != 1) && (u.CoachNutrition == q.CoachNutrition || q.CoachNutrition != 1) && (u.CoachOlympicLifting == q.CoachOlympicLifting || q.CoachOlympicLifting != 1) && (u.CoachOneOnOne == q.CoachOneOnOne || q.CoachOneOnOne != 1) && (u.CoachOnlineAvailable == q.CoachOnlineAvailable || q.CoachOnlineAvailable != 1) && (u.CoachOnlineOnly == q.CoachOnlineOnly || q.CoachOnlineOnly != 1) && (u.CoachOther == q.CoachOther || q.CoachOther != 1) && (u.CoachPhysio == q.CoachPhysio || q.CoachPhysio != 1) && (u.CoachPowerlifting == q.CoachPowerlifting || q.CoachPowerlifting != 1) && (u.CoachProgramOnly == q.CoachProgramOnly || q.CoachProgramOnly != 1) && (u.CoachStrongman == q.CoachStrongman || q.CoachStrongman != 1) && (u.CoachWeightLoss == q.CoachWeightLoss || q.CoachWeightLoss != 1) ) select u); int total = coaches.Count(); CityGeo city = await db.CityGeo.FindAsync(q.CityID); if (city != null) {//sort by distance first if city selected GeoAPI.Geometries.IGeometryFactory geometryFactory = NtsGeometryServices.Instance.CreateGeometryFactory(srid: 4326); GeoAPI.Geometries.IPoint cityLocation = geometryFactory.CreatePoint(new GeoAPI.Geometries.Coordinate((double)city.Latitude, (double)city.Longitude)); coaches = coaches.Where(x => x.Latitude.HasValue) .OrderBy(x => new GeoAPI.Geometries.Coordinate(x.Latitude.Value, x.Longitutde.Value).Distance(cityLocation.Coordinate)) .ThenByDescending(x => x.CreationDate); } else if (!string.IsNullOrEmpty(k)) {//else sort by keyword relevance only coaches = coaches .OrderByDescending(x => !string.IsNullOrEmpty(x.FirstName) && x.FirstName.ToLower().StartsWith(k)) .ThenByDescending(x => x.CreationDate); } else {//else sort by rating coaches = coaches.OrderByDescending(x => x.AverageRating); } coaches = coaches.Skip(pageNum * takeAmount).Take(takeAmount); if (coaches.Count() == 0) { return(new HttpResult(true, new { coaches = new List <UserPublic>(), total }, "")); } else { return(new HttpResult(true, new { coaches = coaches.Where(x => x != null).AsEnumerable().Select(s => new UserPublic(s, false)).ToList(), total }, "")); } } catch (Exception e) { var rawData = db.User.ToList(); return(new HttpResult(false, null, Functions.ErrorMessage(e))); } }