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