Example #1
0
        async Task IGameScoreService.PostScoreAsync(int userId, LevelMetricQueryResult levelMetricQueryResult)
        {
            IEnumerable <UserGameLevel> levels = userGameLevelRepository.GetWhere(ugl =>
                                                                                  ugl.UserId.Equals(userId) && ugl.GameLevelId.Equals(levelMetricQueryResult.LevelId));

            UserGameLevel level = levels.FirstOrDefault();

            // if exist update
            if (level != null)
            {
                // don't update if worth
                if (level.UserStars > levelMetricQueryResult.Score)
                {
                    return;
                }

                level.UserStars = levelMetricQueryResult.Score;
                await userGameLevelRepository.Update(level).ConfigureAwait(false);
            }
            // add if not exist
            else
            {
                await AddLevelsAsync(userId, levelMetricQueryResult).ConfigureAwait(false);
            }
        }
Example #2
0
        /// <summary>
        ///     This is to local compute score
        /// </summary>
        /// <param name="levelResult"></param>
        /// <returns></returns>
        LevelMetricQueryResult IGameScoreService.GetLevelScore(LevelResult levelResult)
        {
            int score = Data.DTO.Services.CardGame.Score(levelResult.WordsCount, levelResult.OpeningQuantity);

            var levelScore = new LevelMetricQueryResult(levelResult.LevelId, score);

            return(levelScore);
        }
Example #3
0
        /// <summary>
        ///     This is to get score by level and update information of memorizing user word pairs
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="levelMetricQuery"></param>
        /// <returns></returns>
        public async Task <LevelMetricQueryResult> SetResultsAsync(int userId, LevelMetricQuery levelMetricQuery)
        {
            // set sore;
            LevelMetricQueryResult levelMetricQueryResult = gameScoreService.GetLevelScore(levelMetricQuery.ToLevelResult());

            // save score to storage
            await gameScoreService.PostScoreAsync(userId, levelMetricQueryResult).ConfigureAwait(false);

            // Calculate word metric;
            IKnowledgeQualifier knowledgeQualifier = new CardGameKnowledge(levelMetricQuery);
            // update words pairs license in store
            await knowledgeUpdateService.UpdateKnowledge(userId, knowledgeQualifier).ConfigureAwait(false);

            return(levelMetricQueryResult);
        }
Example #4
0
        public async Task <IActionResult> PostScore(LevelResult levelResult)
        {
            int authorizedId = User.GetUserId();
            // calculate score
            LevelMetricQueryResult answer = gameScoreService.GetLevelScore(levelResult);

            if (levelResult.LevelId < 0)
            {
                return(Ok(answer));
            }

            // save score to user level
            try
            {
                await gameScoreService.PostScoreAsync(authorizedId, answer);
            }
            catch (ArgumentNullException e)
            {
                return(BadRequest(e.Message));
            }

            return(Ok(answer));
        }
Example #5
0
        public async Task <IActionResult> PostScore(LevelMetricQuery levelMetricQuery)
        {
            // Convert to new request
            var classicCardsMetrics = new ClassicCardLevelMetricQuery
            {
                UserId  = User.GetUserId(),
                Metrics = new List <ClassicCardLevelMetric>()
                {
                    new ClassicCardLevelMetric()
                    {
                        GameLevelId          = levelMetricQuery.GameLevelId,
                        WordPairIdOpenCounts = levelMetricQuery.WordPairIdOpenCounts
                    }
                }.ToImmutableArray()
            };

            // Actual code
            ClassicCardLevelMetricQueryResult result;

            try
            {
                result = await mediator.Send(classicCardsMetrics)
                         .ConfigureAwait(false);
            }
            catch (ArgumentOutOfRangeException e)
            {
                return(BadRequest(e.Message));
            }

            // convert to obsolete answer
            var scoreInfo = result.ClassicCardLevelResult.FirstOrDefault();
            LevelMetricQueryResult answer =
                new LevelMetricQueryResult(scoreInfo.LevelId, scoreInfo.Score);

            return(Ok(answer));
        }