Example #1
0
        /// <summary>
        /// Processes the request.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns>Task{MissionCompletionResult}.</returns>
        public async Task <MissionCompletionResult> ProcessRequest(MissionRequest request)
        {
            request.Mission.TriesFor1Star  = 7;
            request.Mission.TriesFor2Stars = 4;
            request.Mission.TriesFor3Stars = 2;

            if (request.Proof.Coordinates == null || !request.Proof.Coordinates.Any())
            {
                return(new MissionCompletionResult(OperationResultStatus.Error, "Not enough data"));
            }

            var    oupostCoordinate = request.Proof.Coordinates.First();
            double distanceError;

            if (!CheckOutpost(oupostCoordinate, request.User, out distanceError))
            {
                return(await MissionRequestService.ProcessIncorrectTry(request, _missionRepository, _missionRequestRepository));
            }
            await MissionRequestService.SetStarsAccordingToTries(request, _missionRequestRepository);

            request.User.OutpostCoordinate = oupostCoordinate;

            var recievedPoints = await RewardsCalculator.UpdateUserAfterMissionCompletion(
                request,
                _missionRepository);

            return(new MissionCompletionResult
            {
                Points = recievedPoints,
                StarsCount = request.StarsCount,
                MissionCompletionStatus = MissionCompletionStatus.Success
            });
        }
Example #2
0
        /// <summary>
        /// Processes the request.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns>Task{MissionCompletionResult}.</returns>
        public async Task <MissionCompletionResult> ProcessRequest(MissionRequest request)
        {
            request.Mission.TriesFor1Star  = 10;
            request.Mission.TriesFor2Stars = 6;
            request.Mission.TriesFor3Stars = 2;

            if (request.Proof.Coordinates == null || !request.Proof.Coordinates.Any())
            {
                return(new MissionCompletionResult(OperationResultStatus.Error, "Not enough coordinates"));
            }
            var  radarCoordinate = request.Proof.Coordinates.First();
            var  borders         = GetBorders(request.User.HomeCoordinate, radarCoordinate);
            bool isNear;

            if (!CheckValidRadar(radarCoordinate, borders, request.User, out isNear))
            {
                var incorrectResult = await MissionRequestService.ProcessIncorrectTry(request, _missionRepository, _missionRequestRepository); if (incorrectResult.MissionCompletionStatus == MissionCompletionStatus.IntermediateFail)
                {
                    incorrectResult.Description = isNear ? "Incorrect" : "IsNear";
                }
                return(incorrectResult);
            }

            await MissionRequestService.SetStarsAccordingToTries(request, _missionRequestRepository);

            request.User.RadarCoordinate          = radarCoordinate;
            request.User.Selected2BaseCoordinates = borders;

            var recievedPoints = await RewardsCalculator.UpdateUserAfterMissionCompletion(
                request,
                _missionRepository);

            return(new MissionCompletionResult
            {
                Points = recievedPoints,
                StarsCount = request.StarsCount,
                MissionCompletionStatus = MissionCompletionStatus.Success
            });
        }