private static ICollection <Achievement> GetAchievementsFromConfig(AchievementsConfig instance) { var achievements = new List <Achievement>(); var properties = instance.GetType().GetProperties(); foreach (var property in properties) { var dictionary = property.GetValue(instance) as IDictionary; if (dictionary != null) { foreach (DictionaryEntry keyValuePair in dictionary) { achievements.AddRange( ((int[])keyValuePair.Value). Select(_ => new Achievement() { Id = Guid.NewGuid(), Category = keyValuePair.Key.GetType().Name, Type = keyValuePair.Key.ToString(), Value = _ })); } } } return(achievements); }
public static async Task SetupAchievements(AchievementsConfig config, IAchievementRepository achievementRepository) { var dbAchievements = await GetAchievementsFromDb(achievementRepository); var achievementsFromConfig = GetAchievementsFromConfig(config); if (!dbAchievements.Any()) { await AddAchievementsAsync(achievementsFromConfig, achievementRepository); } else { if (dbAchievements.Count() != achievementsFromConfig.Count) { throw new DataAccessException("Achievements setup failed - different number of achievements"); } } }
public AchievementService( IOptions <AchievementsConfig> options, IUserAchievementRepository userAchievementRepository, IAchievementRepository achievementRepository, IMealRepository mealRepository, IFavouriteRepository favouriteRepository, IMealIngredientRepository mealIngredientRepository, IFriendRepository friendRepository, IMealScheduleRepository mealScheduleRepository, IActivityService activityService, IMapper mapper) { achievementsConfig = options.Value; _userAchievementRepository = userAchievementRepository; _achievementRepository = achievementRepository; _mealRepository = mealRepository; _friendRepository = friendRepository; _mealScheduleRepository = mealScheduleRepository; _activityService = activityService; _mapper = mapper; }