Beispiel #1
0
        public async Task <Character> CreateAsync(ICreateCharacterModel createModel)
        {
            List <Episode> episodes = await _episodeRepository.GetAllByOrDefaultAsync(x => createModel.Episodes.Contains(x.Name));

            List <Character> friends = await _characterRepository.GetAllByOrDefaultAsync(x => createModel.Friends.Contains(x.Name));

            return(new Character()
            {
                Name = createModel.Name,
                Friends = friends.Select(x => new CharacterFriend()
                {
                    FriendCharacterId = x.Id
                }).ToList(),
                Episodes = episodes.Select(x => new CharacterEpisode()
                {
                    EpisodeId = x.Id
                }).ToList()
            });
        }
        private async Task SetCharacterEpisodesAsync(Character characterToUpdate, List <string> episodes)
        {
            List <Episode> episodesToAssign = await _episodeRepository.GetAllByOrDefaultAsync(x => episodes.Contains(x.Name));

            HashSet <int> episodesToAssignIds = episodesToAssign.Select(x => x.Id).ToHashSet();

            List <CharacterEpisode>?episodesToRemove
                = characterToUpdate.Episodes.Where(x => !episodesToAssignIds.Contains(x.EpisodeId)).ToList();

            List <CharacterEpisode>?episodesToAdd = episodesToAssignIds.Where(x => !characterToUpdate.Episodes.Any(y => y.EpisodeId == x))
                                                    .Select(episodeId => new CharacterEpisode()
            {
                CharacterId = characterToUpdate.Id,
                EpisodeId   = episodeId
            }).ToList();

            episodesToRemove.ForEach(x => characterToUpdate.Episodes.Remove(x));

            episodesToAdd.ForEach(x => characterToUpdate.Episodes.Add(x));
        }