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");
            }
        }
    }
Exemple #3
0
 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;
 }