예제 #1
0
        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));
        }
예제 #2
0
        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));
        }
예제 #3
0
        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
            }));
        }