private async Task <IdResult> TryAddApprovedCommonPlace(
            string uniquePlaceId,
            string fullName,
            GeoCoordinate coordinate,
            List <CommonPlaceAzure> commonPlaces)
        {
            if (commonPlaces.Count < GameConstants.Mission.TemporaryCommonPlaceLimit)
            {
                return(null);
            }

            var distances = new List <double>();

            commonPlaces.ForEach(
                c => { distances.Add(c.Coordinate.ConvertToGeoCoordinate().GetDistanceTo(coordinate)); });
            var validDistances = distances.Where(d => d <= GameConstants.Mission.TemporaryCommonPlaceAccuracyRadius);

            if (validDistances.Count() < GameConstants.Mission.TemporaryCommonPlaceLimit)
            {
                return(null);
            }

            var commonPlace = new CommonPlace
            {
                Coordinate   = coordinate,
                IsApproved   = true,
                Name         = fullName,
                SettlementId = uniquePlaceId
            };

            var azureModel = commonPlace.ToAzureModel();

            return(await _azureManager.AddEntityAsync(azureModel));
        }
        private IdResult TryAddApprovedCommonPlace(
            string uniquePlaceId,
            string fullName,
            GeoCoordinate coordinate,
            List <CommonPlace> commonPlaces)
        {
            if (commonPlaces.Count() < GameConstants.Mission.TemporaryCommonPlaceLimit)
            {
                return(null);
            }

            var distances = new List <double>();

            commonPlaces.ForEach(c => { distances.Add(c.Coordinate.GetDistanceTo(coordinate)); });
            var validDistances = distances.Where(d => d <= GameConstants.Mission.TemporaryCommonPlaceAccuracyRadius);

            if (validDistances.Count() < GameConstants.Mission.TemporaryCommonPlaceLimit)
            {
                return(null);
            }

            var commonPlace = new CommonPlace
            {
                Coordinate   = coordinate,
                IsApproved   = true,
                Name         = fullName,
                SettlementId = uniquePlaceId
            };

            _commonPlaces.Add(commonPlace);
            return(new IdResult(uniquePlaceId));
        }
Example #3
0
        /// <summary>
        ///     To the azure model.
        /// </summary>
        /// <param name="commonPlace">The common place.</param>
        /// <returns>CommonPlaceAzure.</returns>
        public static CommonPlaceAzure ToAzureModel(this CommonPlace commonPlace)
        {
            var azureModel = new CommonPlaceAzure(commonPlace.Name, commonPlace.IsApproved)
            {
                SettlementId = commonPlace.SettlementId,
                Coordinate   = commonPlace.Coordinate.ConvertToAzureCoordinate()
            };

            return(azureModel);
        }
Example #4
0
        /// <summary>
        ///     Froms the azure model.
        /// </summary>
        /// <param name="azureModel">The azure model.</param>
        /// <returns>CommonPlace.</returns>
        public static CommonPlace FromAzureModel(this CommonPlaceAzure azureModel)
        {
            if (azureModel == null)
            {
                return(null);
            }

            var domainModel = new CommonPlace();

            azureModel.CopyTo(domainModel);
            domainModel.Coordinate = azureModel.Coordinate.ConvertToGeoCoordinate();
            domainModel.IsApproved = azureModel.IsApprovedCoordinate;

            return(domainModel);
        }
        /// <summary>
        ///     Adds the temp common place.
        /// </summary>
        /// <param name="userId">The user id.</param>
        /// <param name="commonPlaceAlias">The common place alias.</param>
        /// <param name="coordinate">The coordinate.</param>
        /// <returns>Task.</returns>
        public async Task <IdResult> AddCommonPlace(string userId, string commonPlaceAlias, GeoCoordinate coordinate)
        {
            var alias = await GetAlias(commonPlaceAlias);

            if (alias == null)
            {
                throw new ArgumentException("Alias invalid", nameof(commonPlaceAlias));
            }

            var user = await UserRepository.GetUser(userId);

            var uniqueCityId = user.UniqueCityId;
            var commonPlaces = (await GetCommonPlacesForAlias(uniqueCityId, alias)).ToList();

            if (commonPlaces.Any(c => c.IsApprovedCoordinate))
            {
                return(new IdResult(OperationResultStatus.Error, "Already exist approved coordinate"));
            }

            var approvedResult =
                await TryAddApprovedCommonPlace(uniqueCityId, alias.FullName, coordinate, commonPlaces);

            if (approvedResult != null)
            {
                return(approvedResult);
            }

            var commonPlace = new CommonPlace
            {
                Coordinate   = coordinate,
                IsApproved   = false,
                Name         = alias.FullName,
                SettlementId = uniqueCityId
            };

            var azureModel = commonPlace.ToAzureModel();

            return(await _azureManager.AddEntityAsync(azureModel));
        }