/// <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 }); }
/// <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 }); }