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