예제 #1
0
        private async Task ProcessMessagesAsync(Message message, CancellationToken token)
        {
            var userAchievement = JsonConvert.DeserializeObject <AchievementUnlockedEvent>(Encoding.UTF8.GetString(message.Body));

            // ********************************************************
            // This would normally use a rules engine of some kind here
            // ********************************************************

            var existingUnlockedAchievement = await _unlockedAchievementsRepository.GetEntity(userAchievement.UserId, userAchievement.Achievement);

            // Only update if it isn't there already, otherwise it would set IsNew = true on existing records
            if (existingUnlockedAchievement == null)
            {
                var newAchievement = new UnlockedAchievementEntity
                {
                    PartitionKey = userAchievement.UserId,
                    RowKey       = userAchievement.Achievement,
                    IsNew        = true
                };

                await _unlockedAchievementsRepository.InsertOrMergeEntity(newAchievement);

                var achievementDetails = await _achievementsRepository.GetEntity("1", newAchievement.RowKey);

                var response = new
                {
                    Name = achievementDetails.RowKey,
                    achievementDetails.Description
                };

                await _hubContext.Clients.User(userAchievement.UserId).SendAsync("Unlocked", response, token);
            }
        }
예제 #2
0
        public async Task <IActionResult> Post([FromBody] AddUserAchievementRequest request)
        {
            var unlockedAchievement = new UnlockedAchievementEntity
            {
                PartitionKey = request.UserId,
                RowKey       = request.AchievementName,
                ETag         = "*",
                IsNew        = true
            };

            await _unlockedAchievementsRepository.InsertOrMergeEntity(unlockedAchievement);

            return(NoContent());
        }