Exemple #1
0
        public static async Task <IList <IGameLevel> > SaveCustomLevels(
            this IList <IGameLevel> gameLevels, InWordsDataContext context, int userId)
        {
            var levelsToSave = gameLevels.Where(d => d.GameLevelId <= 0)
                               .GroupBy(d => d.GameLevelId, d => d)
                               .ToDictionary(d => d.Key,
                                             d => d.ToArray());

            var list = levelsToSave
                       .Select(d => d.Value
                               .SelectMany(d => d.LevelWords()
                                           .Distinct())
                               .ToArray())
                       .ToList();

            var levelsIds = await context.CreateLevels(userId, list).ConfigureAwait(false);

            int i = 0;

            foreach (var level in levelsToSave)
            {
                foreach (var type in level.Value)
                {
                    type.GameLevelId = levelsIds[i];
                }
                i++;
            }

            return(gameLevels);
        }
        /// <summary>
        /// GetOrAdd history usergame and save levels in game levels. Return levels ids.
        /// </summary>
        /// <param name="context">database context</param>
        /// <param name="userId">auhtorized user identity</param>
        /// <param name="levelsWords">words id array in list of levels</param>
        /// <returns>Levels ids</returns>
        public static async Task <int[]> CreateLevels(this InWordsDataContext context, int userId, IList <int[]> levelsWords)
        {
            var historyGameId = await context.AddOrGetUserHistoryGame(userId).ConfigureAwait(false);

            var levels = await context.CreateLevels(historyGameId, userId, levelsWords).ConfigureAwait(false);

            return(levels);
        }