public async Task <ActionResult> GuessWithFeedback(GuessViewModel model) { if (ModelState.IsValid) { //save data with finish time var time = new TimeSpan(0, 0, (model.ReturningTimer + model.Timer)); var binding = new UpdateUserBinding() { FinishedUtc = DateTime.UtcNow, FinishingPercent = model.FinalPercentage.Value, PictureCycled = model.ImagesUsed.Value, Time = DateTime.UtcNow.Date.Add(time), Phase = (byte)Phase.TWO }; var editUserRequest = new HttpRequestMessage(HttpMethod.Post, $"/api/user/hash/{model.UserHash}") { Content = new StringContent(JsonSerializer.Serialize(binding), Encoding.UTF8, "application/json") }; var editUserResponse = await _db.BuildApiResponse <UserModel>(editUserRequest, _session._accessToken); return(RedirectToAction("PhaseTwoFinish", "Finish", new { userGuid = model.UserHash })); } return(View(model)); }
public IActionResult UpdateUserViaId(int id, [FromBody] UpdateUserBinding binding) { var user = _ZaxHerbivoryTrainerRepository.GetUser(id); if (user == null) { return(NotFound()); } switch (binding.Phase) { case 0: user.FinishedPhase1Utc = binding.FinishedUtc; user.TimePhase1 = binding.Time; user.FinishingPercentPhase1 = binding.FinishingPercent; user.PictureCycledPhase1 = binding.PictureCycled; break; case 1: user.FinishedPhase2Utc = binding.FinishedUtc; user.TimePhase2 = binding.Time; user.FinishingPercentPhase2 = binding.FinishingPercent; user.PictureCycledPhase2 = binding.PictureCycled; break; case 2: user.FinishedPhase3Utc = binding.FinishedUtc; user.TimePhase3 = binding.Time; user.FinishingPercentPhase3 = binding.FinishingPercent; user.PictureCycledPhase3 = binding.PictureCycled; break; } _ZaxHerbivoryTrainerRepository.Save(); var results = _mapper.Map <UserDto>(user); return(Ok(results)); }
public async Task <JsonResult> GuessCheck(int imageId, decimal guessPercent, int userId, int currentTime, int phase) { var getImageRequest = new HttpRequestMessage(HttpMethod.Get, $"/api/image/{imageId}"); var getImageResponse = await _db.BuildApiResponse <ImageModel>(getImageRequest, _session._accessToken); if (getImageResponse.Status == HttpStatusCode.OK) { var correctPercent = (double)getImageResponse.Content.DecayRate; bool result = false; //convert to percentage double userGuesdecimal = guessPercent == 0 ? 0.0 : ((double)guessPercent / 100); //if range sits between 10 then answer is correct if (userGuesdecimal >= (correctPercent - 0.05) && userGuesdecimal <= (correctPercent + 0.05)) { result = true; } else { result = false; } var userGuessBinding = new { GuessPercentage = (guessPercent / 100), UserId = userId, ImageId = imageId, Phase = phase }; var postGuessRequest = new HttpRequestMessage(HttpMethod.Post, "/api/usersGuess") { Content = new StringContent(JsonSerializer.Serialize(userGuessBinding), Encoding.UTF8, "application/json") }; var postGuessResponse = await _db.BuildApiResponse <UserGuessModel>(postGuessRequest, _session._accessToken); if (postGuessResponse.Status == HttpStatusCode.OK) { //get users guesses list so there isn't any cheating via JS browser methods var getUserGuessRequest = new HttpRequestMessage(HttpMethod.Get, $"/api/usersGuess/{userId}/{phase}"); var getUserGuessResponse = await _db.BuildApiResponse <List <UserGuessModel> >(getUserGuessRequest, _session._accessToken); var dif = 0.0; if (getUserGuessResponse.Status == HttpStatusCode.OK) { //find difference if (getUserGuessResponse.Content.Count >= 10 && phase == (int)Phase.TWO) { var list = getUserGuessResponse.Content.OrderBy(x => x.UsersGuessId).Skip(getUserGuessResponse.Content.Count - 10) .ToList(); dif = Calculations.FindAverageDifferenceOfList(list); } else if (phase == (int)Phase.ONE || phase == (int)Phase.THREE) { var list = getUserGuessResponse.Content.OrderBy(x => x.UsersGuessId) .ToList(); dif = Calculations.FindAverageDifferenceOfList(list); } //save data so if user exits/refreshes can come back to this point var time = new TimeSpan(0, 0, currentTime); var editUserBinding = new UpdateUserBinding() { FinishingPercent = ((decimal)dif), PictureCycled = getUserGuessResponse.Content.Count, Time = DateTime.UtcNow.Date.Add(time), Phase = (byte)phase }; var stringPayload = await Task.Run(() => JsonConvert.SerializeObject(editUserBinding)); var updateUserRequest = new HttpRequestMessage(HttpMethod.Post, $"/api/user/{userId}") { Content = new StringContent(stringPayload, Encoding.UTF8, "application/json") }; var updateUserResponse = await _db.BuildApiResponse <UserModel>(updateUserRequest, _session._accessToken); var returnValues = new { Answer = result, Count = getUserGuessResponse.Content.Count, CorrectPercent = Math.Round((correctPercent * 100)), Total = Math.Round(dif, 2), Error = "", Success = true }; return(Json(returnValues)); } else { return(Json(new { Error = getUserGuessResponse.Status + ": " + getUserGuessResponse.Error, Success = false })); } } else { return(Json(new { Error = postGuessResponse.Status + ": " + postGuessResponse.Error, Success = false })); } } return(Json(new { Error = getImageResponse.Status + ": " + getImageResponse.Error, Success = false })); }