Ejemplo n.º 1
0
        /// <summary>
        /// get action result to search for localisation, for given criteria
        /// </summary>
        /// <param name="place">an address near where to find localisations</param>
        /// <param name="offerType"></param>
        /// <param name="types"></param>
        /// <param name="features"></param>
        /// <param name="maxCount"></param>
        /// <returns></returns>
        public virtual ActionResult Search(SearchCriteriaApi critariaApi)
        {
            //validate
            if (critariaApi.IsEmpty())
                return new ObjectResult<List<LocalisationJson>>(null, 400, "The \"place or name or latitude/longitude\" parameters must be filled");

            //fill from parameter
            eSearchType searchType = string.IsNullOrEmpty(critariaApi.name) ? eSearchType.ePerOffer : eSearchType.ePerName;
            eOrderBy order = string.IsNullOrEmpty(critariaApi.name) ? (eOrderBy)critariaApi.orderBy : eOrderBy.Rating;
            var criteria = new SearchCriteria { SearchType = searchType, OrderBy = order };

            criteria.Boundary = critariaApi.boundary;

            try
            {
                critariaApi.FillCriteria(ref  criteria);
            }
            catch (Exception ex)
            {
                return new ObjectResult<List<LocalisationJson>>(null, 400, ex.Message);
            }

            //place
            if (!string.IsNullOrEmpty(critariaApi.place))
            {
                criteria.Place = critariaApi.place;
                float lat, lng;
                _GeocodeService.GeoCode(critariaApi.place, out lat, out lng);
                if (lat != 0)
                    critariaApi.latitude = lat;
                if (lng != 0)
                    critariaApi.longitude = lng;
                if (critariaApi.latitude == 0 || critariaApi.longitude == 0)
                    return new ObjectResult<List<LocalisationJson>>(null, 404, "The \"place\" can not be geocoded");
            }

            criteria.LocalisationData.Latitude = critariaApi.latitude;
            criteria.LocalisationData.Longitude = critariaApi.longitude;
            criteria.NorthEastLat = critariaApi.neLat;
            criteria.NorthEastLng = critariaApi.neLng;
            criteria.SouthWestLat = critariaApi.swLat;
            criteria.SouthWestLng = critariaApi.swLng;

            if (!string.IsNullOrEmpty(critariaApi.name))
                criteria.LocalisationData.Name = critariaApi.name;

            //search for matching localisations
            var results = _SearchService.FillSearchResults(criteria);

            //take the json
            var list = results.List;

            var neededLocs = (from item in list.Skip((critariaApi.page - 1) * MiscHelpers.Constants.PageSize).Take(MiscHelpers.ApiConstants.TakeCount) select item.GetJson(this, criteria));
            var neededLocList = neededLocs.ToList();

            double centerLat, centerLng;
            if (criteria.HasBounds())
            {
                centerLat = (criteria.NorthEastLat + criteria.SouthWestLat) / 2;
                centerLng = (criteria.NorthEastLng + criteria.SouthWestLng) / 2;
            }
            else
            {
                centerLat = criteria.LocalisationData.Latitude;
                centerLng = criteria.LocalisationData.Longitude;
            }

            var toRet = new LocalisationsContainer
            {
                list = neededLocList,
                maxCount = list.Count,
                latitude = centerLat,
                longitude = centerLng
            };

            return new ObjectResult<LocalisationsContainer>(toRet);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Get action method to get localisation details
        /// </summary>
        /// <param name="id">localisation id</param>
        /// <returns>an object containing localisatiojn details, comments, and fans</returns>
        public virtual ActionResult GetFavorites(string token)
        {
            var context = ModelFactory.GetUnitOfWork();
            var mRepo = ModelFactory.GetRepository<IMemberRepository>(context);
            try
            {
                var member = mRepo.GetMemberFromToken(token);

                var toRet = new LocalisationsContainer
                {
                    list = member.FavoriteLocalisations.Select(l => l.Localisation.GetJson(this)).ToList(),
                    maxCount = member.FavoriteLocalisations.Count,
                    latitude = 0,
                    longitude = 0
                };

                return new ObjectResult<LocalisationsContainer>(toRet);
            }
            catch (Exception ex)
            {
                _Logger.Error("GetFavorites", ex);
                context.Complete();
                return new ObjectResult<LocalisationsContainer>(null, 400, ex.Message);
            }
        }