Beispiel #1
0
        public static string ImportGames(VaporStoreDbContext context, string jsonString)
        {
            jsonGame_inp_dto[] dtoInfo = JsonConvert.DeserializeObject <jsonGame_inp_dto[]>(jsonString);
            StringBuilder      sb      = new StringBuilder();

            List <Genre>     genres     = new List <Genre>();
            List <Developer> developers = new List <Developer>();
            List <Tag>       tags       = new List <Tag>();
            List <Game>      games      = new List <Game>();

            foreach (var dto in dtoInfo)
            {
                DateTime releaseDate;
                if (!AttributeValidation.IsValid(dto) || !dto.TagNames.Any() || !DateTime.TryParse(dto.ReleaseDate, out releaseDate))
                {
                    sb.AppendLine("Invalid Data");
                    continue;
                }

                Genre genre;
                if (!genres.Any(x => x.Name == dto.Genre))
                {
                    genres.Add(new Genre()
                    {
                        Name = dto.Genre
                    });
                }
                genre = genres.First(x => x.Name == dto.Genre);


                Developer developer;
                if (!developers.Any(x => x.Name == dto.DeveloperName))
                {
                    developers.Add(new Developer()
                    {
                        Name = dto.DeveloperName
                    });
                }
                developer = developers.First(x => x.Name == dto.DeveloperName);

                List <GameTag> gameTags = new List <GameTag>();
                foreach (var tagName in dto.TagNames)
                {
                    if (!tags.Any(x => x.Name == tagName))
                    {
                        tags.Add(new Tag()
                        {
                            Name = tagName
                        });
                    }
                    gameTags.Add(new GameTag()
                    {
                        Tag = tags.First(x => x.Name == tagName)
                    });
                }

                games.Add(new Game()
                {
                    Name        = dto.Name,
                    Price       = dto.Price,
                    ReleaseDate = releaseDate,
                    Developer   = developer,
                    Genre       = genre,
                    GameTags    = gameTags
                });
                sb.AppendLine($"Added {dto.Name} ({dto.Genre}) with {dto.TagNames.Count} tags");
            }

            context.Games.AddRange(games);
            context.SaveChanges();

            return(sb.ToString().Trim());
        }