Exemplo n.º 1
0
        private async Task AddChampionAbilitiesStatistics(ChampionPageDto championPageDto)
        {
            var championAbilities = new ChampionAbilities
            {
                ChampionId    = championPageDto.Key,
                WinRate       = championPageDto.SkillsWinRate,
                TotalMatches  = championPageDto.SkillsMatchesCount,
                SkillPriority = string.Join(", ", championPageDto.SkillsPriority),
            };

            await this.championAbilitiesRepository.AddAsync(championAbilities);

            await this.championAbilitiesRepository.SaveChangesAsync();

            var championAbilitiesId = this.championAbilitiesRepository
                                      .AllAsNoTracking()
                                      .FirstOrDefault(x => x.ChampionId == championPageDto.Key &&
                                                      x.TotalMatches == championPageDto.SkillsMatchesCount && x.WinRate == championPageDto.SkillsWinRate).Id;

            var dbChampionAbilities = this.championAbilitiesRepository.All().FirstOrDefault(x => x.Id == championAbilitiesId);

            foreach (var abilityTypeDto in championPageDto.SkillsPriority)
            {
                var abilityId = this.baseChampionAbilitiesRepository
                                .AllAsNoTracking()
                                .FirstOrDefault(a => a.Id == championPageDto.Key + abilityTypeDto).Id;

                var spellToAdd = await this.baseChampionAbilitiesRepository.GetByIdWithDeletedAsync(abilityId);

                dbChampionAbilities.Abilities.Add(spellToAdd);

                var championAbilitiesAbility = new ChampionAbilitiesAbility
                {
                    BaseAbilityId       = abilityId,
                    ChampionAbilitiesId = championAbilitiesId,
                };

                await this.championAbilitiesAbilitiesRepository.AddAsync(championAbilitiesAbility);
            }

            this.championAbilitiesRepository.Update(dbChampionAbilities);

            await this.championAbilitiesAbilitiesRepository.SaveChangesAsync();

            this.championsRepository.GetByIdWithDeletedAsync(championPageDto.Key).Result.BestAbilities.Add(championAbilities);
        }
        public async Task <NonDataResult> InsertLinkingRelationships(IEnumerable <ChampionModel> champions)
        {
            var linkageModels = champions.SelectMany(x => x.ChampionLinkageModels);

            var abilities = await Context.Ability.Where(a => linkageModels.Select(x => x.PaladinsAbilityId).Contains(a.PabilityId))
                            .Select(a => new { a.Id, a.PabilityId }).ToListAsync();

            var champs = await Context.Champion.Where(c => champions.Select(x => x.PaladinsChampionId).Contains(c.PchampionId))
                         .Select(c => new { c.Id, c.PchampionId }).ToListAsync();

            List <ChampionAbilities> championAbilities = new List <ChampionAbilities>();

            foreach (var linkedModel in linkageModels)
            {
                var ability = abilities.Where(x => x.PabilityId == linkedModel.PaladinsAbilityId).Select(x => new
                {
                    AbilityId = x.Id,
                    linkedModel.PaladinsAbilityId,
                    linkedModel.PaladinsChampionId,
                }).FirstOrDefault();

                var champ = champs.Where(x => x.PchampionId == linkedModel.PaladinsChampionId).Select(x => new
                {
                    ChampionId = x.Id,
                    linkedModel.PaladinsAbilityId,
                    linkedModel.PaladinsChampionId,
                }).FirstOrDefault();

                var link = new ChampionAbilities
                {
                    ChampionId = champ.ChampionId,
                    AbilityId  = ability.AbilityId,
                };
                championAbilities.Add(link);
            }

            return(await InsertListAsync(championAbilities));
        }