예제 #1
0
    private static void SeedDatabase(VaporStoreDbContext context)
    {
        var gamesJson = "[{\"Id\":2,\"Name\":\"Factorio\"},{\"Id\":3,\"Name\":\"Yu-Gi-Oh! Duel Links\"},{\"Id\":4,\"Name\":\"Trove\"},{\"Id\":6,\"Name\":\"Wreckfest\"},{\"Id\":7,\"Name\":\"Terraria\"},{\"Id\":9,\"Name\":\"NBA 2K18\"},{\"Id\":11,\"Name\":\"Total War: WARHAMMER II\"},{\"Id\":12,\"Name\":\"Garry's Mod\"},{\"Id\":13,\"Name\":\"Rust\"},{\"Id\":17,\"Name\":\"Slay the Spire\"},{\"Id\":19,\"Name\":\"Bridge Constructor Portal\"},{\"Id\":20,\"Name\":\"Pro Cycling Manager 2018\"},{\"Id\":21,\"Name\":\"Dungeon Warfare 2\"},{\"Id\":22,\"Name\":\"Soul at Stake\"},{\"Id\":24,\"Name\":\"Tom Clancy's Ghost Recon Wildlands\"},{\"Id\":25,\"Name\":\"Neverwinter\"},{\"Id\":26,\"Name\":\"Squad\"},{\"Id\":27,\"Name\":\"Vampyr\"},{\"Id\":28,\"Name\":\"Brawlhalla\"},{\"Id\":29,\"Name\":\"Conan Exiles\"},{\"Id\":30,\"Name\":\"Call of Duty: Black Ops III\"},{\"Id\":31,\"Name\":\"Human: Fall Flat\"},{\"Id\":32,\"Name\":\"Guns, Gore and Cannoli 2\"},{\"Id\":33,\"Name\":\"DARK SOULS: REMASTERED\"},{\"Id\":34,\"Name\":\"The Elder Scrolls V: Skyrim Special Edition\"},{\"Id\":36,\"Name\":\"FINAL FANTASY XIV Online\"},{\"Id\":38,\"Name\":\"Warface\"},{\"Id\":39,\"Name\":\"NARUTO SHIPPUDEN: Ultimate Ninja STORM 4\"},{\"Id\":40,\"Name\":\"Black Desert Online\"},{\"Id\":41,\"Name\":\"Warhammer 40,000: Gladius - Relics of War\"},{\"Id\":42,\"Name\":\"Planet Coaster\"},{\"Id\":45,\"Name\":\"Rocket League\"},{\"Id\":46,\"Name\":\"Far Cry 5\"},{\"Id\":47,\"Name\":\"FOR HONOR\"},{\"Id\":48,\"Name\":\"Tom Clancy's Rainbow Six Siege\"},{\"Id\":49,\"Name\":\"Warframe\"},{\"Id\":51,\"Name\":\"MONSTER HUNTER: WORLD\"},{\"Id\":52,\"Name\":\"Team Fortress 2\"},{\"Id\":53,\"Name\":\"Counter-Strike: Global Offensive\"},{\"Id\":54,\"Name\":\"Path of Exile\"},{\"Id\":55,\"Name\":\"Rules Of Survival\"},{\"Id\":56,\"Name\":\"Banished\"},{\"Id\":59,\"Name\":\"Divinity: Original Sin 2\"},{\"Id\":61,\"Name\":\"Shadowverse CCG\"},{\"Id\":62,\"Name\":\"RimWorld\"},{\"Id\":63,\"Name\":\"Crash Bandicoot N. Sane Trilogy\"},{\"Id\":64,\"Name\":\"SMITE\"},{\"Id\":65,\"Name\":\"Paladins\"},{\"Id\":67,\"Name\":\"Stardew Valley\"},{\"Id\":68,\"Name\":\"House Flipper\"},{\"Id\":70,\"Name\":\"The Crew 2\"},{\"Id\":71,\"Name\":\"Dead by Daylight\"},{\"Id\":72,\"Name\":\"Football Manager 2018\"},{\"Id\":73,\"Name\":\"Raft\"},{\"Id\":74,\"Name\":\"The Witcher 3: Wild Hunt\"}]";
        var games     = JsonConvert.DeserializeObject <Game[]>(gamesJson);

        var usersJson = "[{\"Id\":1,\"Username\":\"lsilbert\",\"Cards\":[{\"Id\":1,\"Number\":\"1833 5024 0553 6211\"},{\"Id\":33,\"Number\":\"5625 0434 5999 6254\"},{\"Id\":34,\"Number\":\"4902 6975 5076 5316\"}]},{\"Id\":2,\"Username\":\"kmertgen\",\"Cards\":[{\"Id\":27,\"Number\":\"1268 2352 8506 0500\"}]},{\"Id\":3,\"Username\":\"svannini\",\"Cards\":[{\"Id\":24,\"Number\":\"8928 2433 2516 9511\"},{\"Id\":25,\"Number\":\"2175 1623 6855 0876\"},{\"Id\":26,\"Number\":\"1642 7380 2920 7598\"}]},{\"Id\":4,\"Username\":\"aputland\",\"Cards\":[{\"Id\":21,\"Number\":\"2263 5851 7894 9441\"},{\"Id\":22,\"Number\":\"7660 9400 3206 5606\"},{\"Id\":23,\"Number\":\"9454 1480 3127 1373\"}]},{\"Id\":5,\"Username\":\"vsjollema\",\"Cards\":[{\"Id\":18,\"Number\":\"7815 5830 0145 0448\"},{\"Id\":19,\"Number\":\"8608 6806 8238 3092\"},{\"Id\":20,\"Number\":\"4846 1275 4235 3039\"}]},{\"Id\":6,\"Username\":\"rabbison\",\"Cards\":[{\"Id\":17,\"Number\":\"5747 3965 9959 7596\"}]},{\"Id\":7,\"Username\":\"bgunston\",\"Cards\":[{\"Id\":14,\"Number\":\"4347 6119 2799 9266\"},{\"Id\":15,\"Number\":\"3762 5646 9250 3278\"},{\"Id\":16,\"Number\":\"9329 2624 0151 4535\"}]},{\"Id\":8,\"Username\":\"bgraith\",\"Cards\":[{\"Id\":12,\"Number\":\"5962 2881 2375 4209\"},{\"Id\":13,\"Number\":\"4611 7969 4921 6749\"}]},{\"Id\":9,\"Username\":\"mgillicuddy\",\"Cards\":[{\"Id\":10,\"Number\":\"4499 3123 4695 9542\"},{\"Id\":11,\"Number\":\"9924 7778 1587 0277\"}]},{\"Id\":10,\"Username\":\"ehellard\",\"Cards\":[{\"Id\":7,\"Number\":\"2643 8516 1644 3240\"},{\"Id\":8,\"Number\":\"3013 7441 5769 1224\"},{\"Id\":9,\"Number\":\"3563 6747 1527 9955\"}]},{\"Id\":11,\"Username\":\"mdickson\",\"Cards\":[{\"Id\":4,\"Number\":\"5317 5177 3653 0084\"},{\"Id\":5,\"Number\":\"0100 5244 4964 3100\"},{\"Id\":6,\"Number\":\"1478 0420 6326 7013\"}]},{\"Id\":12,\"Username\":\"bfrontczak\",\"Cards\":[{\"Id\":2,\"Number\":\"3962 3870 5087 4536\"},{\"Id\":3,\"Number\":\"9104 6735 7127 3894\"}]},{\"Id\":13,\"Username\":\"mgraveson\",\"Cards\":[{\"Id\":29,\"Number\":\"7991 7779 5123 9211\"},{\"Id\":31,\"Number\":\"7790 7962 4262 5606\"}]},{\"Id\":14,\"Username\":\"fstoter\",\"Cards\":[{\"Id\":60,\"Number\":\"9466 9592 0503 1368\"}]},{\"Id\":15,\"Username\":\"bcorcut\",\"Cards\":[{\"Id\":32,\"Number\":\"7460 6498 2791 0231\"}]},{\"Id\":16,\"Username\":\"asikorsky\",\"Cards\":[{\"Id\":58,\"Number\":\"8746 7253 1464 1729\"},{\"Id\":59,\"Number\":\"3863 8683 6862 0373\"}]},{\"Id\":17,\"Username\":\"klife\",\"Cards\":[{\"Id\":56,\"Number\":\"0540 4834 3653 5943\"},{\"Id\":57,\"Number\":\"2962 0872 0998 4724\"}]},{\"Id\":18,\"Username\":\"gsmallthwaite\",\"Cards\":[{\"Id\":53,\"Number\":\"9889 9719 6896 7474\"},{\"Id\":54,\"Number\":\"5994 2396 1516 2411\"},{\"Id\":55,\"Number\":\"0274 2943 4672 4028\"}]},{\"Id\":19,\"Username\":\"kroderighi\",\"Cards\":[{\"Id\":52,\"Number\":\"7036 3344 0149 7880\"}]},{\"Id\":20,\"Username\":\"hrichardson\",\"Cards\":[{\"Id\":50,\"Number\":\"4082 9960 2674 5955\"},{\"Id\":51,\"Number\":\"5811 6621 2962 1020\"}]},{\"Id\":21,\"Username\":\"atobin\",\"Cards\":[{\"Id\":48,\"Number\":\"6975 1775 3435 4897\"},{\"Id\":49,\"Number\":\"9039 3485 8754 8863\"}]},{\"Id\":22,\"Username\":\"fdedam\",\"Cards\":[{\"Id\":46,\"Number\":\"9574 1800 3833 2972\"},{\"Id\":47,\"Number\":\"9976 1161 9586 1806\"}]},{\"Id\":23,\"Username\":\"cbelchamber\",\"Cards\":[{\"Id\":44,\"Number\":\"1576 2740 8903 1499\"},{\"Id\":45,\"Number\":\"6842 0546 4406 5606\"}]},{\"Id\":24,\"Username\":\"kcarroll\",\"Cards\":[{\"Id\":41,\"Number\":\"2844 3311 3796 4444\"},{\"Id\":42,\"Number\":\"7716 6230 0769 9366\"},{\"Id\":43,\"Number\":\"2829 0002 6052 6217\"}]},{\"Id\":25,\"Username\":\"wskep\",\"Cards\":[{\"Id\":40,\"Number\":\"0327 7877 3023 9451\"}]},{\"Id\":26,\"Username\":\"nparadyce\",\"Cards\":[{\"Id\":38,\"Number\":\"0798 3871 2521 2016\"},{\"Id\":39,\"Number\":\"1661 2121 6244 8487\"}]},{\"Id\":27,\"Username\":\"dsharple\",\"Cards\":[{\"Id\":36,\"Number\":\"5345 7357 8866 7508\"},{\"Id\":37,\"Number\":\"6752 6869 9870 9732\"}]},{\"Id\":28,\"Username\":\"aruthven\",\"Cards\":[{\"Id\":35,\"Number\":\"5208 8381 5687 8508\"}]},{\"Id\":29,\"Username\":\"cgara\",\"Cards\":[{\"Id\":28,\"Number\":\"5103 9356 9768 6854\"}]},{\"Id\":30,\"Username\":\"spaprotny\",\"Cards\":[{\"Id\":30,\"Number\":\"9185 2070 3009 4543\"},{\"Id\":61,\"Number\":\"6777 2480 1837 5824\"}]}]";
        var users     = JsonConvert.DeserializeObject <User[]>(usersJson);

        context.AddRange(games);
        context.AddRange(users);
        context.SaveChanges();
    }
        public static string ImportPurchases(VaporStoreDbContext context, string xmlString)
        {
            var xmlSerializer         = new XmlSerializer(typeof(PurchaseDto[]), new XmlRootAttribute("Purchases"));
            var deserializedPurchases = (PurchaseDto[])xmlSerializer.Deserialize(new StringReader(xmlString));

            var sb = new StringBuilder();

            var purchases = new List <Purchase>();

            foreach (var purchaseDto in deserializedPurchases)
            {
                if (!IsValid(purchaseDto))
                {
                    sb.AppendLine(FailureMsg);
                    continue;
                }

                var isTypeValid = Enum.TryParse(purchaseDto.Type, out PurchaseType purType);

                if (!isTypeValid)
                {
                    sb.AppendLine(FailureMsg);
                    continue;
                }

                var card = context.Cards.FirstOrDefault(c => c.Number == purchaseDto.Card);
                if (card == null)
                {
                    sb.AppendLine(FailureMsg);
                    continue;
                }

                var game = context.Games.FirstOrDefault(g => g.Name == purchaseDto.Title);
                if (game == null)
                {
                    sb.AppendLine(FailureMsg);
                    continue;
                }

                var date = DateTime.ParseExact(purchaseDto.Date, XmlDateFormat, CultureInfo.InvariantCulture);

                var purchase = new Purchase()
                {
                    Game       = game,
                    Card       = card,
                    Date       = date,
                    ProductKey = purchaseDto.Key,
                    Type       = purType
                };

                purchases.Add(purchase);

                sb.AppendLine($"Imported {purchaseDto.Title} for {card.User.Username}");
            }

            context.AddRange(purchases);
            context.SaveChanges();

            return(sb.ToString().Trim());
        }
예제 #3
0
        public static string ImportPurchases(VaporStoreDbContext context, string xmlString)
        {
            var outputResult        = new StringBuilder();
            var validPurchasesToAdd = new List <Purchase>();

            var purchasesDtos = XmlConverter.Deserializer <ImportPurchaseDto>(xmlString, "Purchases");

            foreach (var purchaseDto in purchasesDtos)
            {
                PurchaseType purchaseType;
                var          isGenreValid = Enum.TryParse <PurchaseType>(purchaseDto.Type, true, out purchaseType);

                var targetGame = context.Games.FirstOrDefault(x => x.Name == purchaseDto.Title);
                var targetCard = context.Cards.FirstOrDefault(x => x.Number == purchaseDto.Card);

                if (!IsValid(purchaseDto) || targetGame == null || !isGenreValid || targetCard == null)
                {
                    outputResult.AppendLine(ErrorMessage);
                    continue;
                }
                var newPurchase = new Purchase
                {
                    Game       = targetGame,
                    Type       = purchaseType,
                    ProductKey = purchaseDto.ProductKey,
                    Date       = DateTime.ParseExact(purchaseDto.Date, "dd/MM/yyyy HH:mm", CultureInfo.InvariantCulture),
                    Card       = targetCard
                };
                validPurchasesToAdd.Add(newPurchase);
                outputResult.AppendLine(string.Format(SuccessfullyImportedPurchase, newPurchase.Game.Name, newPurchase.Card.User.Username));
            }
            context.AddRange(validPurchasesToAdd);
            context.SaveChanges();
            return(outputResult.ToString().TrimEnd());
        }
예제 #4
0
        public static string ImportPurchases(VaporStoreDbContext context, string xmlString)
        {
            var xmlSerializer = new XmlSerializer(typeof(PurchaseDto[]), new XmlRootAttribute("Purchases"));

            var purchasesDto = (PurchaseDto[])(xmlSerializer.Deserialize(new StringReader(xmlString)));

            var sb        = new StringBuilder();
            var purchases = new List <Purchase>();

            foreach (var purchaseDto in purchasesDto)
            {
                if (!isValid(purchasesDto))
                {
                    sb.AppendLine("Invalid Data");
                    continue;
                }

                var isValidEnum = Enum.TryParse <PurchaseType>(purchaseDto.Type, out PurchaseType result);

                if (!isValidEnum)
                {
                    sb.AppendLine("Invalid Data");
                    continue;
                }

                var gameTitle  = purchaseDto.Title;
                var cardNumber = purchaseDto.Card;

                var game = context.Games.FirstOrDefault(x => x.Name == gameTitle);
                var card = context.Cards.FirstOrDefault(x => x.Number == cardNumber);

                if (game == null || card == null)
                {
                    sb.AppendLine("Invalid Data");
                    continue;
                }

                var purchase = new Purchase()
                {
                    Type       = result,
                    ProductKey = purchaseDto.Key,
                    Date       = DateTime.ParseExact(purchaseDto.Date, "dd/MM/yyyy HH:mm", CultureInfo.InvariantCulture),
                    Game       = game,
                    Card       = card
                };

                purchases.Add(purchase);
                sb.AppendLine($"Imported {purchase.Game.Name} for {purchase.Card.User.Username}");
            }

            context.AddRange(purchases);
            context.SaveChanges();

            string finalResult = sb.ToString().Trim();

            return(finalResult);
        }
예제 #5
0
        public static string ImportUsers(VaporStoreDbContext context, string jsonString)
        {
            var result       = new StringBuilder();
            var importedDtos = JsonConvert.DeserializeObject <List <UserDto> >(jsonString);

            var validUsers = new List <User>();

            foreach (var userDto in importedDtos)
            {
                if (!IsValid(userDto))
                {
                    result.AppendLine(ErrorMessage);
                    continue;
                }

                var cards = new List <Card>();

                var cardsAreValid = true;

                foreach (var cardDto in userDto.Cards)
                {
                    if (!IsValid(cardDto) || !Enum.TryParse <CardType>(cardDto.Type, out CardType type))
                    {
                        cardsAreValid = false;
                        break;
                    }

                    var card = new Card
                    {
                        Number = cardDto.Number,
                        Cvc    = cardDto.Cvc,
                        Type   = type
                    };

                    cards.Add(card);
                }

                var user = new User
                {
                    FullName = userDto.FullName,
                    Username = userDto.Username,
                    Email    = userDto.Email,
                    Age      = userDto.Age,
                    Cards    = cards
                };

                validUsers.Add(user);

                result.AppendLine($"Imported {user.Username} with {user.Cards.Count} cards");
            }

            context.AddRange(validUsers);
            context.SaveChanges();

            return(result.ToString());
        }
예제 #6
0
        public static string ImportUsers(VaporStoreDbContext context, string jsonString)
        {
            var usersDtos = JsonConvert.DeserializeObject <UserDto[]>(jsonString);

            StringBuilder sb    = new StringBuilder();
            var           users = new List <User>();

            foreach (var dto in usersDtos)
            {
                if (!IsValid(dto))
                {
                    sb.AppendLine(InvalidData);
                    continue;
                }

                if (dto.Cards.Any(x => !IsValid(x)))
                {
                    sb.AppendLine(InvalidData);
                    continue;
                }

                var cards = new List <Card>();
                foreach (var cardDto in dto.Cards)
                {
                    var card = new Card()
                    {
                        Number = cardDto.Number,
                        Cvc    = cardDto.Cvc,
                        Type   = cardDto.Type
                    };

                    cards.Add(card);
                }

                var user = new User()
                {
                    FullName = dto.FullName,
                    Username = dto.Username,
                    Email    = dto.Email,
                    Age      = dto.Age,
                    Cards    = cards
                };

                users.Add(user);
                sb.AppendLine($"Imported {user.Username} with {user.Cards.Count} cards");
            }

            context.AddRange(users);
            context.SaveChanges();

            return(sb.ToString().TrimEnd());
        }
예제 #7
0
        public static string ImportUsers(VaporStoreDbContext context, string jsonString)
        {
            var sb    = new StringBuilder();
            var dtos  = JsonConvert.DeserializeObject <ImportUserDto[]>(jsonString);
            var users = new List <User>();

            foreach (var dto in dtos)
            {
                if (!IsValid(dto) || !dto.Cards.All(IsValid))
                {
                    sb.AppendLine("Invalid Data");
                    continue;
                }

                foreach (var card in dto.Cards)
                {
                    var cardType = Enum.TryParse <CardType>(card.Type, out CardType result);
                    if (!cardType)
                    {
                        sb.AppendLine("Invalid Data");
                        break;
                    }
                }

                var user = new User
                {
                    FullName = dto.FullName,
                    Username = dto.Username,
                    Email    = dto.Email,
                    Age      = dto.Age
                };

                foreach (var card in dto.Cards)
                {
                    user.Cards.Add(new Card
                    {
                        Number = card.Number,
                        Cvc    = card.Cvc,
                        Type   = Enum.Parse <CardType>(card.Type)
                    });
                }
                sb.AppendLine($"Imported {user.Username} with {user.Cards.Count} cards");
                users.Add(user);
            }
            context.AddRange(users);
            context.SaveChanges();

            return(sb.ToString().TrimEnd());
        }
예제 #8
0
        public static string ImportGames(VaporStoreDbContext context, string jsonString)
        {
            StringBuilder sb    = new StringBuilder();
            var           games = new List <Game>();

            var gamesDto = JsonConvert.DeserializeObject <ImportGameDto[]>(jsonString);

            foreach (var gameDto in gamesDto)
            {
                if (!IsValid(gameDto) || gameDto.Tags.Count == 0)
                {
                    sb.AppendLine("Invalid Data");
                    continue;
                }

                var game = new Game()
                {
                    Name        = gameDto.Name,
                    Price       = gameDto.Price,
                    ReleaseDate = DateTime.ParseExact(gameDto.ReleaseDate, "yyyy-MM-dd", CultureInfo.InvariantCulture)
                };

                var developer = GetDevelopoer(context, gameDto.Developer);
                var genre     = GetGenre(context, gameDto.Genre);

                game.Developer = developer;
                game.Genre     = genre;

                foreach (var currentTag in gameDto.Tags)
                {
                    var tag = GetTag(context, currentTag);

                    game.GameTags.Add(new GameTag()
                    {
                        Game = game,
                        Tag  = tag
                    });
                }

                games.Add(game);
                sb.AppendLine($"Added {game.Name} ({game.Genre.Name}) with {game.GameTags.Count} tags");
            }

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

            return(sb.ToString().TrimEnd());
        }
예제 #9
0
        public static string ImportUsers(VaporStoreDbContext context, string jsonString)
        {
            var userDtos = JsonConvert.DeserializeObject <ImportUserDto[]>(jsonString);

            StringBuilder sb = new StringBuilder();

            var users = new List <User>();

            foreach (var userDto in userDtos)
            {
                if (!IsValid(userDto))
                {
                    sb.AppendLine(ErrorMessage);
                    continue;
                }

                var userCards = new List <Card>();

                foreach (var card in userDto.Cards)
                {
                    if (!IsValid(card))
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    userCards.Add(card);
                }

                var user = new User()
                {
                    FullName = userDto.FullName,
                    Username = userDto.Username,
                    Email    = userDto.Email,
                    Age      = userDto.Age,
                    Cards    = userCards
                };

                users.Add(user);

                sb.AppendLine(String.Format(ImportedUser, user.Username, userCards.Count));
            }

            context.AddRange(users);
            context.SaveChanges();

            return(sb.ToString().TrimEnd());
        }
예제 #10
0
        public static string ImportPurchases(VaporStoreDbContext context, string xmlString)
        {
            StringBuilder sb = new StringBuilder();

            XmlSerializer xs = new XmlSerializer(typeof(ImportParchaseDto[]), new XmlRootAttribute("Purchases"));

            var purchases = (ImportParchaseDto[])xs.Deserialize(new StringReader(xmlString));

            ;

            var validPurchases = new List <Purchase>();

            foreach (var pur in purchases)
            {
                var card = context.Cards.FirstOrDefault(x => x.Number == pur.CardNumber);
                var game = context.Games.FirstOrDefault(x => x.Name == pur.GameName);

                if (!IsValid(pur) || card == null || game == null)
                {
                    sb.AppendLine("Invalid Data");
                    continue;
                }

                var cardOwner = context.Cards
                                .Where(x => x.Number == pur.CardNumber)
                                .Select(x => new
                {
                    x.User.Username
                })
                                .First();

                var purchase = new Purchase()
                {
                    Type       = pur.Type,
                    ProductKey = pur.ProductKey,
                    Date       = DateTime.ParseExact(pur.Date, "dd/MM/yyyy HH:mm", CultureInfo.InvariantCulture),
                    Card       = card,
                    Game       = game
                };
                validPurchases.Add(purchase);
                sb.AppendLine($"Imported {game.Name} for {cardOwner.Username}");
            }

            context.AddRange(validPurchases);
            context.SaveChanges();
            ;
            return(sb.ToString().TrimEnd());
        }
예제 #11
0
        public static string ImportPurchases(VaporStoreDbContext context, string xmlString)
        {
            var att        = new XmlRootAttribute("Purchases");
            var serializer = new XmlSerializer(typeof(ImportPurchasesDTO[]), att);

            var purchasesDTO = (ImportPurchasesDTO[])serializer.Deserialize(new StringReader(xmlString));
            var games        = context.Games.ToHashSet();
            var cards        = context.Cards
                               .Include(c => c.User)
                               .ToHashSet();

            var sb        = new StringBuilder();
            var purchases = new List <Purchase>();

            foreach (var purchaseDTO in purchasesDTO)
            {
                var game = games.FirstOrDefault(g => g.Name == purchaseDTO.Title);
                var card = cards.FirstOrDefault(c => c.Number == purchaseDTO.Card);

                bool isValidPurchase =
                    IsValid(purchaseDTO) &&
                    game != null &&
                    card != null;

                if (!isValidPurchase)
                {
                    sb.AppendLine("Invalid Data");
                    continue;
                }

                var purchase = new Purchase
                {
                    Type       = purchaseDTO.Type,
                    ProductKey = purchaseDTO.Key,
                    Date       = DateTime.ParseExact(purchaseDTO.Date, "dd/MM/yyyy HH:mm", CultureInfo.InvariantCulture),
                    Card       = card,
                    Game       = game
                };

                purchases.Add(purchase);
                sb.AppendLine($"Imported {purchaseDTO.Title} for {card.User.Username}");
            }

            context.AddRange(purchases);
            context.SaveChanges();
            return(sb.ToString().TrimEnd());
        }
예제 #12
0
    private static void SeedDatabase(VaporStoreDbContext context)
    {
        var datasetsJson = "{\"Game\":[{\"Id\":1,\"Name\":\"Dota 2\",\"Price\":0.00,\"ReleaseDate\":\"2013-07-09T00:00:00\",\"DeveloperId\":1,\"GenreId\":1},{\"Id\":2,\"Name\":\"Factorio\",\"Price\":25.00,\"ReleaseDate\":\"2016-02-25T00:00:00\",\"DeveloperId\":45,\"GenreId\":12},{\"Id\":3,\"Name\":\"Yu-Gi-Oh! Duel Links\",\"Price\":0.00,\"ReleaseDate\":\"2017-11-16T00:00:00\",\"DeveloperId\":25,\"GenreId\":8},{\"Id\":4,\"Name\":\"Trove\",\"Price\":0.00,\"ReleaseDate\":\"2015-07-09T00:00:00\",\"DeveloperId\":35,\"GenreId\":1},{\"Id\":5,\"Name\":\"Shining Resonance Refrain\",\"Price\":49.99,\"ReleaseDate\":\"2018-07-09T00:00:00\",\"DeveloperId\":24,\"GenreId\":9},{\"Id\":6,\"Name\":\"Wreckfest\",\"Price\":44.99,\"ReleaseDate\":\"2018-06-14T00:00:00\",\"DeveloperId\":11,\"GenreId\":1},{\"Id\":7,\"Name\":\"Terraria\",\"Price\":9.99,\"ReleaseDate\":\"2011-05-16T00:00:00\",\"DeveloperId\":2,\"GenreId\":1},{\"Id\":8,\"Name\":\"Frostpunk\",\"Price\":29.99,\"ReleaseDate\":\"2018-04-24T00:00:00\",\"DeveloperId\":44,\"GenreId\":7},{\"Id\":9,\"Name\":\"NBA 2K18\",\"Price\":49.99,\"ReleaseDate\":\"2017-09-14T00:00:00\",\"DeveloperId\":3,\"GenreId\":7},{\"Id\":10,\"Name\":\"ARK: Survival Evolved\",\"Price\":89.00,\"ReleaseDate\":\"2017-08-29T00:00:00\",\"DeveloperId\":5,\"GenreId\":1},{\"Id\":11,\"Name\":\"Total War: WARHAMMER II\",\"Price\":59.99,\"ReleaseDate\":\"2017-09-28T00:00:00\",\"DeveloperId\":6,\"GenreId\":1},{\"Id\":12,\"Name\":\"Garry's Mod\",\"Price\":9.99,\"ReleaseDate\":\"2006-11-29T00:00:00\",\"DeveloperId\":7,\"GenreId\":11},{\"Id\":13,\"Name\":\"Rust\",\"Price\":31.99,\"ReleaseDate\":\"2018-02-08T00:00:00\",\"DeveloperId\":7,\"GenreId\":6},{\"Id\":14,\"Name\":\"World of Warships\",\"Price\":0.00,\"ReleaseDate\":\"2017-11-15T00:00:00\",\"DeveloperId\":8,\"GenreId\":1},{\"Id\":15,\"Name\":\"Kingdom Come: Deliverance\",\"Price\":49.99,\"ReleaseDate\":\"2018-02-13T00:00:00\",\"DeveloperId\":9,\"GenreId\":1},{\"Id\":16,\"Name\":\"Dig or Die\",\"Price\":11.99,\"ReleaseDate\":\"2018-07-10T00:00:00\",\"DeveloperId\":4,\"GenreId\":1},{\"Id\":17,\"Name\":\"Slay the Spire\",\"Price\":15.99,\"ReleaseDate\":\"2017-11-14T00:00:00\",\"DeveloperId\":43,\"GenreId\":11},{\"Id\":18,\"Name\":\"Beat Saber\",\"Price\":19.99,\"ReleaseDate\":\"2018-05-01T00:00:00\",\"DeveloperId\":42,\"GenreId\":11},{\"Id\":19,\"Name\":\"Bridge Constructor Portal\",\"Price\":9.99,\"ReleaseDate\":\"2017-12-20T00:00:00\",\"DeveloperId\":41,\"GenreId\":7},{\"Id\":20,\"Name\":\"Pro Cycling Manager 2018\",\"Price\":39.99,\"ReleaseDate\":\"2018-06-28T00:00:00\",\"DeveloperId\":26,\"GenreId\":7},{\"Id\":21,\"Name\":\"Dungeon Warfare 2\",\"Price\":12.49,\"ReleaseDate\":\"2018-07-06T00:00:00\",\"DeveloperId\":27,\"GenreId\":11},{\"Id\":22,\"Name\":\"Soul at Stake\",\"Price\":14.99,\"ReleaseDate\":\"2018-06-25T00:00:00\",\"DeveloperId\":28,\"GenreId\":4},{\"Id\":23,\"Name\":\"Arma 3\",\"Price\":34.99,\"ReleaseDate\":\"2013-09-12T00:00:00\",\"DeveloperId\":29,\"GenreId\":1},{\"Id\":24,\"Name\":\"Tom Clancy's Ghost Recon Wildlands\",\"Price\":59.99,\"ReleaseDate\":\"2017-03-06T00:00:00\",\"DeveloperId\":30,\"GenreId\":1},{\"Id\":25,\"Name\":\"Neverwinter\",\"Price\":0.00,\"ReleaseDate\":\"2013-12-05T00:00:00\",\"DeveloperId\":31,\"GenreId\":9},{\"Id\":26,\"Name\":\"Squad\",\"Price\":36.99,\"ReleaseDate\":\"2015-12-14T00:00:00\",\"DeveloperId\":32,\"GenreId\":1},{\"Id\":27,\"Name\":\"Vampyr\",\"Price\":49.99,\"ReleaseDate\":\"2018-06-04T00:00:00\",\"DeveloperId\":33,\"GenreId\":1},{\"Id\":28,\"Name\":\"Brawlhalla\",\"Price\":0.00,\"ReleaseDate\":\"2017-10-17T00:00:00\",\"DeveloperId\":34,\"GenreId\":1},{\"Id\":29,\"Name\":\"Conan Exiles\",\"Price\":39.99,\"ReleaseDate\":\"2018-05-08T00:00:00\",\"DeveloperId\":36,\"GenreId\":6},{\"Id\":30,\"Name\":\"Call of Duty: Black Ops III\",\"Price\":59.99,\"ReleaseDate\":\"2015-11-05T00:00:00\",\"DeveloperId\":46,\"GenreId\":1},{\"Id\":31,\"Name\":\"Human: Fall Flat\",\"Price\":14.99,\"ReleaseDate\":\"2016-07-22T00:00:00\",\"DeveloperId\":37,\"GenreId\":9},{\"Id\":32,\"Name\":\"Guns, Gore and Cannoli 2\",\"Price\":12.99,\"ReleaseDate\":\"2018-03-02T00:00:00\",\"DeveloperId\":38,\"GenreId\":1},{\"Id\":33,\"Name\":\"DARK SOULS: REMASTERED\",\"Price\":39.99,\"ReleaseDate\":\"2018-05-23T00:00:00\",\"DeveloperId\":39,\"GenreId\":1},{\"Id\":34,\"Name\":\"The Elder Scrolls V: Skyrim Special Edition\",\"Price\":39.99,\"ReleaseDate\":\"2016-10-27T00:00:00\",\"DeveloperId\":40,\"GenreId\":2},{\"Id\":35,\"Name\":\"Subnautica\",\"Price\":22.99,\"ReleaseDate\":\"2018-01-23T00:00:00\",\"DeveloperId\":10,\"GenreId\":9},{\"Id\":36,\"Name\":\"FINAL FANTASY XIV Online\",\"Price\":9.99,\"ReleaseDate\":\"2014-02-18T00:00:00\",\"DeveloperId\":12,\"GenreId\":3},{\"Id\":37,\"Name\":\"Darksiders III\",\"Price\":59.99,\"ReleaseDate\":\"2018-11-27T00:00:00\",\"DeveloperId\":22,\"GenreId\":4},{\"Id\":38,\"Name\":\"Warface\",\"Price\":0.00,\"ReleaseDate\":\"2014-07-01T00:00:00\",\"DeveloperId\":13,\"GenreId\":1},{\"Id\":39,\"Name\":\"NARUTO SHIPPUDEN: Ultimate Ninja STORM 4\",\"Price\":29.99,\"ReleaseDate\":\"2016-02-04T00:00:00\",\"DeveloperId\":59,\"GenreId\":1},{\"Id\":40,\"Name\":\"Black Desert Online\",\"Price\":9.99,\"ReleaseDate\":\"2017-05-24T00:00:00\",\"DeveloperId\":58,\"GenreId\":4},{\"Id\":41,\"Name\":\"Warhammer 40,000: Gladius - Relics of War\",\"Price\":37.99,\"ReleaseDate\":\"2018-07-12T00:00:00\",\"DeveloperId\":57,\"GenreId\":5},{\"Id\":42,\"Name\":\"Planet Coaster\",\"Price\":37.99,\"ReleaseDate\":\"2016-11-17T00:00:00\",\"DeveloperId\":56,\"GenreId\":7},{\"Id\":43,\"Name\":\"Jurassic World Evolution\",\"Price\":54.99,\"ReleaseDate\":\"2018-06-11T00:00:00\",\"DeveloperId\":56,\"GenreId\":4},{\"Id\":44,\"Name\":\"Grand Theft Auto V\",\"Price\":29.99,\"ReleaseDate\":\"2015-04-13T00:00:00\",\"DeveloperId\":60,\"GenreId\":1},{\"Id\":45,\"Name\":\"Rocket League\",\"Price\":12.59,\"ReleaseDate\":\"2015-07-07T00:00:00\",\"DeveloperId\":54,\"GenreId\":1},{\"Id\":46,\"Name\":\"Far Cry 5\",\"Price\":59.99,\"ReleaseDate\":\"2018-03-26T00:00:00\",\"DeveloperId\":53,\"GenreId\":1},{\"Id\":47,\"Name\":\"FOR HONOR\",\"Price\":14.99,\"ReleaseDate\":\"2017-02-13T00:00:00\",\"DeveloperId\":53,\"GenreId\":1},{\"Id\":48,\"Name\":\"Tom Clancy's Rainbow Six Siege\",\"Price\":14.99,\"ReleaseDate\":\"2015-12-01T00:00:00\",\"DeveloperId\":53,\"GenreId\":1},{\"Id\":49,\"Name\":\"Warframe\",\"Price\":0.00,\"ReleaseDate\":\"2013-03-25T00:00:00\",\"DeveloperId\":52,\"GenreId\":4},{\"Id\":50,\"Name\":\"PLAYERUNKNOWN'S BATTLEGROUNDS\",\"Price\":29.99,\"ReleaseDate\":\"2017-12-21T00:00:00\",\"DeveloperId\":51,\"GenreId\":4},{\"Id\":51,\"Name\":\"MONSTER HUNTER: WORLD\",\"Price\":59.99,\"ReleaseDate\":\"2018-08-09T00:00:00\",\"DeveloperId\":50,\"GenreId\":1},{\"Id\":52,\"Name\":\"Team Fortress 2\",\"Price\":0.00,\"ReleaseDate\":\"2007-10-10T00:00:00\",\"DeveloperId\":1,\"GenreId\":1},{\"Id\":53,\"Name\":\"Counter-Strike: Global Offensive\",\"Price\":12.49,\"ReleaseDate\":\"2012-08-21T00:00:00\",\"DeveloperId\":1,\"GenreId\":1},{\"Id\":54,\"Name\":\"Path of Exile\",\"Price\":0.00,\"ReleaseDate\":\"2013-10-23T00:00:00\",\"DeveloperId\":65,\"GenreId\":6},{\"Id\":55,\"Name\":\"Rules Of Survival\",\"Price\":2.39,\"ReleaseDate\":\"2018-05-30T00:00:00\",\"DeveloperId\":19,\"GenreId\":1},{\"Id\":56,\"Name\":\"Banished\",\"Price\":18.99,\"ReleaseDate\":\"2014-02-18T00:00:00\",\"DeveloperId\":64,\"GenreId\":11},{\"Id\":57,\"Name\":\"War Thunder\",\"Price\":0.00,\"ReleaseDate\":\"2013-08-15T00:00:00\",\"DeveloperId\":63,\"GenreId\":1},{\"Id\":58,\"Name\":\"Hunt Showdown\",\"Price\":29.99,\"ReleaseDate\":\"2018-02-22T00:00:00\",\"DeveloperId\":13,\"GenreId\":4},{\"Id\":59,\"Name\":\"Divinity: Original Sin 2\",\"Price\":44.99,\"ReleaseDate\":\"2017-09-14T00:00:00\",\"DeveloperId\":14,\"GenreId\":9},{\"Id\":60,\"Name\":\"Touhou: Scarlet Curiosity\",\"Price\":14.99,\"ReleaseDate\":\"2018-07-11T00:00:00\",\"DeveloperId\":15,\"GenreId\":1},{\"Id\":61,\"Name\":\"Shadowverse CCG\",\"Price\":0.00,\"ReleaseDate\":\"2016-10-27T00:00:00\",\"DeveloperId\":16,\"GenreId\":8},{\"Id\":62,\"Name\":\"RimWorld\",\"Price\":27.99,\"ReleaseDate\":\"2016-07-15T00:00:00\",\"DeveloperId\":17,\"GenreId\":11},{\"Id\":63,\"Name\":\"Crash Bandicoot N. Sane Trilogy\",\"Price\":39.99,\"ReleaseDate\":\"2018-06-29T00:00:00\",\"DeveloperId\":18,\"GenreId\":1},{\"Id\":64,\"Name\":\"SMITE\",\"Price\":0.00,\"ReleaseDate\":\"2015-09-08T00:00:00\",\"DeveloperId\":48,\"GenreId\":1},{\"Id\":65,\"Name\":\"Paladins\",\"Price\":0.00,\"ReleaseDate\":\"2018-05-08T00:00:00\",\"DeveloperId\":48,\"GenreId\":1},{\"Id\":66,\"Name\":\"Seeking Dawn\",\"Price\":33.99,\"ReleaseDate\":\"2018-07-12T00:00:00\",\"DeveloperId\":20,\"GenreId\":4},{\"Id\":67,\"Name\":\"Stardew Valley\",\"Price\":13.99,\"ReleaseDate\":\"2016-02-26T00:00:00\",\"DeveloperId\":21,\"GenreId\":11},{\"Id\":68,\"Name\":\"House Flipper\",\"Price\":16.79,\"ReleaseDate\":\"2018-05-17T00:00:00\",\"DeveloperId\":23,\"GenreId\":11},{\"Id\":69,\"Name\":\"The Forest\",\"Price\":16.79,\"ReleaseDate\":\"2018-04-30T00:00:00\",\"DeveloperId\":47,\"GenreId\":1},{\"Id\":70,\"Name\":\"The Crew 2\",\"Price\":59.99,\"ReleaseDate\":\"2018-06-28T00:00:00\",\"DeveloperId\":55,\"GenreId\":1},{\"Id\":71,\"Name\":\"Dead by Daylight\",\"Price\":19.99,\"ReleaseDate\":\"2016-06-14T00:00:00\",\"DeveloperId\":49,\"GenreId\":4},{\"Id\":72,\"Name\":\"Football Manager 2018\",\"Price\":54.99,\"ReleaseDate\":\"2017-11-09T00:00:00\",\"DeveloperId\":62,\"GenreId\":7},{\"Id\":73,\"Name\":\"Raft\",\"Price\":19.99,\"ReleaseDate\":\"2018-05-23T00:00:00\",\"DeveloperId\":61,\"GenreId\":10},{\"Id\":74,\"Name\":\"The Witcher 3: Wild Hunt\",\"Price\":29.99,\"ReleaseDate\":\"2015-05-18T00:00:00\",\"DeveloperId\":66,\"GenreId\":6}],\"Developer\":[{\"Id\":44,\"Name\":\"11 bit studios\"},{\"Id\":15,\"Name\":\"Ankake Spa\"},{\"Id\":42,\"Name\":\"Beat Games\"},{\"Id\":49,\"Name\":\"Behaviour Digital Inc.\"},{\"Id\":40,\"Name\":\"Bethesda Game Studios\"},{\"Id\":34,\"Name\":\"Blue Mammoth Games\"},{\"Id\":29,\"Name\":\"Bohemia Interactive\"},{\"Id\":11,\"Name\":\"Bugbear\"},{\"Id\":50,\"Name\":\"CAPCOM Co., Ltd.\"},{\"Id\":66,\"Name\":\"CD PROJEKT RED\"},{\"Id\":28,\"Name\":\"Chongming Studio\"},{\"Id\":41,\"Name\":\"ClockStone\"},{\"Id\":21,\"Name\":\"ConcernedApe\"},{\"Id\":38,\"Name\":\"Crazy Monkey Studios\"},{\"Id\":6,\"Name\":\"CREATIVE ASSEMBLY\"},{\"Id\":31,\"Name\":\"Cryptic Studios\"},{\"Id\":13,\"Name\":\"Crytek\"},{\"Id\":26,\"Name\":\"Cyanide Studio\"},{\"Id\":59,\"Name\":\"CyberConnect2 Co. Ltd.\"},{\"Id\":16,\"Name\":\"Cygames, Inc.\"},{\"Id\":52,\"Name\":\"Digital Extremes\"},{\"Id\":33,\"Name\":\"DONTNOD Entertainment\"},{\"Id\":23,\"Name\":\"Empyrean\"},{\"Id\":47,\"Name\":\"Endnight Games Ltd\"},{\"Id\":7,\"Name\":\"Facepunch Studios\"},{\"Id\":56,\"Name\":\"Frontier Developments\"},{\"Id\":36,\"Name\":\"Funcom\"},{\"Id\":4,\"Name\":\"Gaddy Games\"},{\"Id\":63,\"Name\":\"Gaijin Entertainment\"},{\"Id\":65,\"Name\":\"Grinding Gear Games\"},{\"Id\":22,\"Name\":\"Gunfire Games\"},{\"Id\":48,\"Name\":\"Hi-Rez Studios\"},{\"Id\":55,\"Name\":\"Ivory Tower\"},{\"Id\":25,\"Name\":\"Konami Digital Entertainment\"},{\"Id\":14,\"Name\":\"Larian Studios\"},{\"Id\":17,\"Name\":\"Ludeon Studios\"},{\"Id\":43,\"Name\":\"Mega Crit Games\"},{\"Id\":20,\"Name\":\"Multiverse\"},{\"Id\":19,\"Name\":\"Netease Games\"},{\"Id\":37,\"Name\":\"No Brakes Games\"},{\"Id\":32,\"Name\":\"Offworld Industries\"},{\"Id\":58,\"Name\":\"Pearl Abyss\"},{\"Id\":57,\"Name\":\"Proxy Studios\"},{\"Id\":54,\"Name\":\"Psyonix, Inc.\"},{\"Id\":51,\"Name\":\"PUBG Corporation\"},{\"Id\":39,\"Name\":\"QLOC\"},{\"Id\":61,\"Name\":\"Redbeet Interactive\"},{\"Id\":2,\"Name\":\"Re-Logic\"},{\"Id\":60,\"Name\":\"Rockstar North\"},{\"Id\":24,\"Name\":\"SEGA\"},{\"Id\":64,\"Name\":\"Shining Rock Software LLC\"},{\"Id\":62,\"Name\":\"Sports Interactive\"},{\"Id\":12,\"Name\":\"Square Enix\"},{\"Id\":5,\"Name\":\"Studio Wildcard\"},{\"Id\":46,\"Name\":\"Treyarch\"},{\"Id\":35,\"Name\":\"Trion Worlds\"},{\"Id\":53,\"Name\":\"Ubisoft Montreal\"},{\"Id\":30,\"Name\":\"Ubisoft Paris\"},{\"Id\":10,\"Name\":\"Unknown Worlds Entertainment\"},{\"Id\":27,\"Name\":\"Valsar\"},{\"Id\":1,\"Name\":\"Valve\"},{\"Id\":18,\"Name\":\"Vicarious Visions\"},{\"Id\":3,\"Name\":\"Visual Concepts\"},{\"Id\":8,\"Name\":\"Wargaming Group Limited\"},{\"Id\":9,\"Name\":\"Warhorse Studios\"},{\"Id\":45,\"Name\":\"Wube Software LTD.\"}],\"Genre\":[{\"Id\":1,\"Name\":\"Action\"},{\"Id\":9,\"Name\":\"Adventure\"},{\"Id\":12,\"Name\":\"Casual\"},{\"Id\":8,\"Name\":\"Free to Play\"},{\"Id\":11,\"Name\":\"Indie\"},{\"Id\":3,\"Name\":\"Massively Multiplayer\"},{\"Id\":6,\"Name\":\"Nudity\"},{\"Id\":2,\"Name\":\"RPG\"},{\"Id\":7,\"Name\":\"Simulation\"},{\"Id\":10,\"Name\":\"Single-player\"},{\"Id\":5,\"Name\":\"Strategy\"},{\"Id\":4,\"Name\":\"Violent\"}],\"Tag\":[{\"Id\":23,\"Name\":\"Captions available\"},{\"Id\":20,\"Name\":\"Commentary available\"},{\"Id\":8,\"Name\":\"Co-op\"},{\"Id\":18,\"Name\":\"Cross-Platform Multiplayer\"},{\"Id\":15,\"Name\":\"Full controller support\"},{\"Id\":5,\"Name\":\"In-App Purchases\"},{\"Id\":14,\"Name\":\"Includes level editor\"},{\"Id\":25,\"Name\":\"Local Co-op\"},{\"Id\":16,\"Name\":\"Local Multi-Player\"},{\"Id\":22,\"Name\":\"MMO\"},{\"Id\":9,\"Name\":\"Multi-player\"},{\"Id\":21,\"Name\":\"Online Co-op\"},{\"Id\":12,\"Name\":\"Online Multi-Player\"},{\"Id\":24,\"Name\":\"Partial Controller Support\"},{\"Id\":17,\"Name\":\"Shared/Split Screen\"},{\"Id\":2,\"Name\":\"Single-player\"},{\"Id\":13,\"Name\":\"Stats\"},{\"Id\":11,\"Name\":\"Steam Achievements\"},{\"Id\":19,\"Name\":\"Steam Cloud\"},{\"Id\":3,\"Name\":\"Steam Leaderboards\"},{\"Id\":7,\"Name\":\"Steam Trading Cards\"},{\"Id\":6,\"Name\":\"Steam Workshop\"},{\"Id\":4,\"Name\":\"SteamVR Collectibles\"},{\"Id\":10,\"Name\":\"Valve Anti-Cheat enabled\"},{\"Id\":1,\"Name\":\"VR Support\"}],\"GameTag\":[{\"GameId\":10,\"TagId\":1},{\"GameId\":35,\"TagId\":1},{\"GameId\":2,\"TagId\":2},{\"GameId\":3,\"TagId\":2},{\"GameId\":5,\"TagId\":2},{\"GameId\":6,\"TagId\":2},{\"GameId\":7,\"TagId\":2},{\"GameId\":8,\"TagId\":2},{\"GameId\":9,\"TagId\":2},{\"GameId\":10,\"TagId\":2},{\"GameId\":11,\"TagId\":2},{\"GameId\":12,\"TagId\":2},{\"GameId\":15,\"TagId\":2},{\"GameId\":16,\"TagId\":2},{\"GameId\":17,\"TagId\":2},{\"GameId\":18,\"TagId\":2},{\"GameId\":19,\"TagId\":2},{\"GameId\":20,\"TagId\":2},{\"GameId\":21,\"TagId\":2},{\"GameId\":23,\"TagId\":2},{\"GameId\":24,\"TagId\":2},{\"GameId\":27,\"TagId\":2},{\"GameId\":28,\"TagId\":2},{\"GameId\":29,\"TagId\":2},{\"GameId\":30,\"TagId\":2},{\"GameId\":31,\"TagId\":2},{\"GameId\":32,\"TagId\":2},{\"GameId\":33,\"TagId\":2},{\"GameId\":34,\"TagId\":2},{\"GameId\":35,\"TagId\":2},{\"GameId\":36,\"TagId\":2},{\"GameId\":37,\"TagId\":2},{\"GameId\":39,\"TagId\":2},{\"GameId\":41,\"TagId\":2},{\"GameId\":42,\"TagId\":2},{\"GameId\":43,\"TagId\":2},{\"GameId\":44,\"TagId\":2},{\"GameId\":45,\"TagId\":2},{\"GameId\":46,\"TagId\":2},{\"GameId\":47,\"TagId\":2},{\"GameId\":48,\"TagId\":2},{\"GameId\":49,\"TagId\":2},{\"GameId\":51,\"TagId\":2},{\"GameId\":54,\"TagId\":2},{\"GameId\":56,\"TagId\":2},{\"GameId\":57,\"TagId\":2},{\"GameId\":59,\"TagId\":2},{\"GameId\":60,\"TagId\":2},{\"GameId\":61,\"TagId\":2},{\"GameId\":62,\"TagId\":2},{\"GameId\":63,\"TagId\":2},{\"GameId\":66,\"TagId\":2},{\"GameId\":67,\"TagId\":2},{\"GameId\":68,\"TagId\":2},{\"GameId\":69,\"TagId\":2},{\"GameId\":70,\"TagId\":2},{\"GameId\":72,\"TagId\":2},{\"GameId\":73,\"TagId\":2},{\"GameId\":74,\"TagId\":2},{\"GameId\":6,\"TagId\":3},{\"GameId\":17,\"TagId\":3},{\"GameId\":18,\"TagId\":3},{\"GameId\":23,\"TagId\":3},{\"GameId\":30,\"TagId\":3},{\"GameId\":39,\"TagId\":3},{\"GameId\":72,\"TagId\":3},{\"GameId\":1,\"TagId\":4},{\"GameId\":1,\"TagId\":5},{\"GameId\":3,\"TagId\":5},{\"GameId\":4,\"TagId\":5},{\"GameId\":13,\"TagId\":5},{\"GameId\":14,\"TagId\":5},{\"GameId\":24,\"TagId\":5},{\"GameId\":25,\"TagId\":5},{\"GameId\":38,\"TagId\":5},{\"GameId\":40,\"TagId\":5},{\"GameId\":46,\"TagId\":5},{\"GameId\":47,\"TagId\":5},{\"GameId\":48,\"TagId\":5},{\"GameId\":49,\"TagId\":5},{\"GameId\":52,\"TagId\":5},{\"GameId\":53,\"TagId\":5},{\"GameId\":54,\"TagId\":5},{\"GameId\":55,\"TagId\":5},{\"GameId\":57,\"TagId\":5},{\"GameId\":61,\"TagId\":5},{\"GameId\":65,\"TagId\":5},{\"GameId\":70,\"TagId\":5},{\"GameId\":1,\"TagId\":6},{\"GameId\":4,\"TagId\":6},{\"GameId\":6,\"TagId\":6},{\"GameId\":10,\"TagId\":6},{\"GameId\":12,\"TagId\":6},{\"GameId\":13,\"TagId\":6},{\"GameId\":20,\"TagId\":6},{\"GameId\":21,\"TagId\":6},{\"GameId\":23,\"TagId\":6},{\"GameId\":29,\"TagId\":6},{\"GameId\":30,\"TagId\":6},{\"GameId\":42,\"TagId\":6},{\"GameId\":45,\"TagId\":6},{\"GameId\":52,\"TagId\":6},{\"GameId\":53,\"TagId\":6},{\"GameId\":59,\"TagId\":6},{\"GameId\":62,\"TagId\":6},{\"GameId\":72,\"TagId\":6},{\"GameId\":1,\"TagId\":7},{\"GameId\":3,\"TagId\":7},{\"GameId\":4,\"TagId\":7},{\"GameId\":5,\"TagId\":7},{\"GameId\":7,\"TagId\":7},{\"GameId\":8,\"TagId\":7},{\"GameId\":11,\"TagId\":7},{\"GameId\":12,\"TagId\":7},{\"GameId\":13,\"TagId\":7},{\"GameId\":15,\"TagId\":7},{\"GameId\":16,\"TagId\":7},{\"GameId\":19,\"TagId\":7},{\"GameId\":20,\"TagId\":7},{\"GameId\":23,\"TagId\":7},{\"GameId\":24,\"TagId\":7},{\"GameId\":25,\"TagId\":7},{\"GameId\":26,\"TagId\":7},{\"GameId\":27,\"TagId\":7},{\"GameId\":28,\"TagId\":7},{\"GameId\":29,\"TagId\":7},{\"GameId\":30,\"TagId\":7},{\"GameId\":31,\"TagId\":7},{\"GameId\":35,\"TagId\":7},{\"GameId\":37,\"TagId\":7},{\"GameId\":38,\"TagId\":7},{\"GameId\":40,\"TagId\":7},{\"GameId\":41,\"TagId\":7},{\"GameId\":42,\"TagId\":7},{\"GameId\":43,\"TagId\":7},{\"GameId\":45,\"TagId\":7},{\"GameId\":47,\"TagId\":7},{\"GameId\":48,\"TagId\":7},{\"GameId\":49,\"TagId\":7},{\"GameId\":52,\"TagId\":7},{\"GameId\":53,\"TagId\":7},{\"GameId\":54,\"TagId\":7},{\"GameId\":59,\"TagId\":7},{\"GameId\":60,\"TagId\":7},{\"GameId\":63,\"TagId\":7},{\"GameId\":64,\"TagId\":7},{\"GameId\":65,\"TagId\":7},{\"GameId\":67,\"TagId\":7},{\"GameId\":68,\"TagId\":7},{\"GameId\":71,\"TagId\":7},{\"GameId\":74,\"TagId\":7},{\"GameId\":1,\"TagId\":8},{\"GameId\":4,\"TagId\":8},{\"GameId\":7,\"TagId\":8},{\"GameId\":10,\"TagId\":8},{\"GameId\":12,\"TagId\":8},{\"GameId\":13,\"TagId\":8},{\"GameId\":14,\"TagId\":8},{\"GameId\":16,\"TagId\":8},{\"GameId\":22,\"TagId\":8},{\"GameId\":23,\"TagId\":8},{\"GameId\":24,\"TagId\":8},{\"GameId\":25,\"TagId\":8},{\"GameId\":28,\"TagId\":8},{\"GameId\":29,\"TagId\":8},{\"GameId\":30,\"TagId\":8},{\"GameId\":32,\"TagId\":8},{\"GameId\":36,\"TagId\":8},{\"GameId\":38,\"TagId\":8},{\"GameId\":41,\"TagId\":8},{\"GameId\":45,\"TagId\":8},{\"GameId\":46,\"TagId\":8},{\"GameId\":48,\"TagId\":8},{\"GameId\":49,\"TagId\":8},{\"GameId\":51,\"TagId\":8},{\"GameId\":54,\"TagId\":8},{\"GameId\":57,\"TagId\":8},{\"GameId\":59,\"TagId\":8},{\"GameId\":66,\"TagId\":8},{\"GameId\":69,\"TagId\":8},{\"GameId\":71,\"TagId\":8},{\"GameId\":1,\"TagId\":9},{\"GameId\":2,\"TagId\":9},{\"GameId\":6,\"TagId\":9},{\"GameId\":7,\"TagId\":9},{\"GameId\":9,\"TagId\":9},{\"GameId\":10,\"TagId\":9},{\"GameId\":11,\"TagId\":9},{\"GameId\":12,\"TagId\":9},{\"GameId\":13,\"TagId\":9},{\"GameId\":14,\"TagId\":9},{\"GameId\":16,\"TagId\":9},{\"GameId\":22,\"TagId\":9},{\"GameId\":23,\"TagId\":9},{\"GameId\":24,\"TagId\":9},{\"GameId\":25,\"TagId\":9},{\"GameId\":26,\"TagId\":9},{\"GameId\":28,\"TagId\":9},{\"GameId\":29,\"TagId\":9},{\"GameId\":30,\"TagId\":9},{\"GameId\":33,\"TagId\":9},{\"GameId\":36,\"TagId\":9},{\"GameId\":38,\"TagId\":9},{\"GameId\":39,\"TagId\":9},{\"GameId\":41,\"TagId\":9},{\"GameId\":44,\"TagId\":9},{\"GameId\":45,\"TagId\":9},{\"GameId\":46,\"TagId\":9},{\"GameId\":48,\"TagId\":9},{\"GameId\":49,\"TagId\":9},{\"GameId\":50,\"TagId\":9},{\"GameId\":51,\"TagId\":9},{\"GameId\":52,\"TagId\":9},{\"GameId\":53,\"TagId\":9},{\"GameId\":54,\"TagId\":9},{\"GameId\":59,\"TagId\":9},{\"GameId\":61,\"TagId\":9},{\"GameId\":64,\"TagId\":9},{\"GameId\":65,\"TagId\":9},{\"GameId\":66,\"TagId\":9},{\"GameId\":69,\"TagId\":9},{\"GameId\":71,\"TagId\":9},{\"GameId\":72,\"TagId\":9},{\"GameId\":1,\"TagId\":10},{\"GameId\":10,\"TagId\":10},{\"GameId\":12,\"TagId\":10},{\"GameId\":13,\"TagId\":10},{\"GameId\":26,\"TagId\":10},{\"GameId\":30,\"TagId\":10},{\"GameId\":52,\"TagId\":10},{\"GameId\":53,\"TagId\":10},{\"GameId\":2,\"TagId\":11},{\"GameId\":3,\"TagId\":11},{\"GameId\":4,\"TagId\":11},{\"GameId\":5,\"TagId\":11},{\"GameId\":7,\"TagId\":11},{\"GameId\":8,\"TagId\":11},{\"GameId\":9,\"TagId\":11},{\"GameId\":10,\"TagId\":11},{\"GameId\":11,\"TagId\":11},{\"GameId\":12,\"TagId\":11},{\"GameId\":13,\"TagId\":11},{\"GameId\":14,\"TagId\":11},{\"GameId\":15,\"TagId\":11},{\"GameId\":16,\"TagId\":11},{\"GameId\":17,\"TagId\":11},{\"GameId\":19,\"TagId\":11},{\"GameId\":20,\"TagId\":11},{\"GameId\":21,\"TagId\":11},{\"GameId\":23,\"TagId\":11},{\"GameId\":27,\"TagId\":11},{\"GameId\":28,\"TagId\":11},{\"GameId\":29,\"TagId\":11},{\"GameId\":30,\"TagId\":11},{\"GameId\":31,\"TagId\":11},{\"GameId\":32,\"TagId\":11},{\"GameId\":33,\"TagId\":11},{\"GameId\":34,\"TagId\":11},{\"GameId\":35,\"TagId\":11},{\"GameId\":37,\"TagId\":11},{\"GameId\":38,\"TagId\":11},{\"GameId\":39,\"TagId\":11},{\"GameId\":42,\"TagId\":11},{\"GameId\":43,\"TagId\":11},{\"GameId\":44,\"TagId\":11},{\"GameId\":45,\"TagId\":11},{\"GameId\":51,\"TagId\":11},{\"GameId\":52,\"TagId\":11},{\"GameId\":53,\"TagId\":11},{\"GameId\":54,\"TagId\":11},{\"GameId\":56,\"TagId\":11},{\"GameId\":57,\"TagId\":11},{\"GameId\":59,\"TagId\":11},{\"GameId\":60,\"TagId\":11},{\"GameId\":63,\"TagId\":11},{\"GameId\":64,\"TagId\":11},{\"GameId\":65,\"TagId\":11},{\"GameId\":67,\"TagId\":11},{\"GameId\":68,\"TagId\":11},{\"GameId\":71,\"TagId\":11},{\"GameId\":72,\"TagId\":11},{\"GameId\":73,\"TagId\":11},{\"GameId\":74,\"TagId\":11},{\"GameId\":2,\"TagId\":12},{\"GameId\":3,\"TagId\":12},{\"GameId\":4,\"TagId\":12},{\"GameId\":6,\"TagId\":12},{\"GameId\":7,\"TagId\":12},{\"GameId\":13,\"TagId\":12},{\"GameId\":14,\"TagId\":12},{\"GameId\":16,\"TagId\":12},{\"GameId\":20,\"TagId\":12},{\"GameId\":22,\"TagId\":12},{\"GameId\":23,\"TagId\":12},{\"GameId\":26,\"TagId\":12},{\"GameId\":28,\"TagId\":12},{\"GameId\":29,\"TagId\":12},{\"GameId\":31,\"TagId\":12},{\"GameId\":32,\"TagId\":12},{\"GameId\":36,\"TagId\":12},{\"GameId\":40,\"TagId\":12},{\"GameId\":41,\"TagId\":12},{\"GameId\":47,\"TagId\":12},{\"GameId\":50,\"TagId\":12},{\"GameId\":54,\"TagId\":12},{\"GameId\":55,\"TagId\":12},{\"GameId\":58,\"TagId\":12},{\"GameId\":59,\"TagId\":12},{\"GameId\":61,\"TagId\":12},{\"GameId\":65,\"TagId\":12},{\"GameId\":66,\"TagId\":12},{\"GameId\":70,\"TagId\":12},{\"GameId\":71,\"TagId\":12},{\"GameId\":73,\"TagId\":12},{\"GameId\":6,\"TagId\":13},{\"GameId\":13,\"TagId\":13},{\"GameId\":17,\"TagId\":13},{\"GameId\":31,\"TagId\":13},{\"GameId\":32,\"TagId\":13},{\"GameId\":45,\"TagId\":13},{\"GameId\":50,\"TagId\":13},{\"GameId\":51,\"TagId\":13},{\"GameId\":52,\"TagId\":13},{\"GameId\":53,\"TagId\":13},{\"GameId\":2,\"TagId\":14},{\"GameId\":10,\"TagId\":14},{\"GameId\":12,\"TagId\":14},{\"GameId\":23,\"TagId\":14},{\"GameId\":25,\"TagId\":14},{\"GameId\":46,\"TagId\":14},{\"GameId\":52,\"TagId\":14},{\"GameId\":59,\"TagId\":14},{\"GameId\":5,\"TagId\":15},{\"GameId\":7,\"TagId\":15},{\"GameId\":9,\"TagId\":15},{\"GameId\":10,\"TagId\":15},{\"GameId\":15,\"TagId\":15},{\"GameId\":19,\"TagId\":15},{\"GameId\":27,\"TagId\":15},{\"GameId\":28,\"TagId\":15},{\"GameId\":29,\"TagId\":15},{\"GameId\":30,\"TagId\":15},{\"GameId\":31,\"TagId\":15},{\"GameId\":32,\"TagId\":15},{\"GameId\":33,\"TagId\":15},{\"GameId\":35,\"TagId\":15},{\"GameId\":37,\"TagId\":15},{\"GameId\":39,\"TagId\":15},{\"GameId\":43,\"TagId\":15},{\"GameId\":44,\"TagId\":15},{\"GameId\":45,\"TagId\":15},{\"GameId\":53,\"TagId\":15},{\"GameId\":59,\"TagId\":15},{\"GameId\":71,\"TagId\":15},{\"GameId\":74,\"TagId\":15},{\"GameId\":2,\"TagId\":16},{\"GameId\":23,\"TagId\":16},{\"GameId\":28,\"TagId\":16},{\"GameId\":32,\"TagId\":16},{\"GameId\":59,\"TagId\":16},{\"GameId\":9,\"TagId\":17},{\"GameId\":28,\"TagId\":17},{\"GameId\":31,\"TagId\":17},{\"GameId\":32,\"TagId\":17},{\"GameId\":45,\"TagId\":17},{\"GameId\":59,\"TagId\":17},{\"GameId\":2,\"TagId\":18},{\"GameId\":3,\"TagId\":18},{\"GameId\":12,\"TagId\":18},{\"GameId\":13,\"TagId\":18},{\"GameId\":28,\"TagId\":18},{\"GameId\":32,\"TagId\":18},{\"GameId\":36,\"TagId\":18},{\"GameId\":41,\"TagId\":18},{\"GameId\":45,\"TagId\":18},{\"GameId\":52,\"TagId\":18},{\"GameId\":57,\"TagId\":18},{\"GameId\":61,\"TagId\":18},{\"GameId\":2,\"TagId\":19},{\"GameId\":7,\"TagId\":19},{\"GameId\":8,\"TagId\":19},{\"GameId\":9,\"TagId\":19},{\"GameId\":10,\"TagId\":19},{\"GameId\":12,\"TagId\":19},{\"GameId\":15,\"TagId\":19},{\"GameId\":16,\"TagId\":19},{\"GameId\":17,\"TagId\":19},{\"GameId\":19,\"TagId\":19},{\"GameId\":20,\"TagId\":19},{\"GameId\":21,\"TagId\":19},{\"GameId\":22,\"TagId\":19},{\"GameId\":27,\"TagId\":19},{\"GameId\":31,\"TagId\":19},{\"GameId\":34,\"TagId\":19},{\"GameId\":37,\"TagId\":19},{\"GameId\":39,\"TagId\":19},{\"GameId\":41,\"TagId\":19},{\"GameId\":42,\"TagId\":19},{\"GameId\":43,\"TagId\":19},{\"GameId\":45,\"TagId\":19},{\"GameId\":59,\"TagId\":19},{\"GameId\":60,\"TagId\":19},{\"GameId\":62,\"TagId\":19},{\"GameId\":63,\"TagId\":19},{\"GameId\":67,\"TagId\":19},{\"GameId\":68,\"TagId\":19},{\"GameId\":69,\"TagId\":19},{\"GameId\":71,\"TagId\":19},{\"GameId\":72,\"TagId\":19},{\"GameId\":73,\"TagId\":19},{\"GameId\":74,\"TagId\":19},{\"GameId\":52,\"TagId\":20},{\"GameId\":7,\"TagId\":21},{\"GameId\":13,\"TagId\":21},{\"GameId\":14,\"TagId\":21},{\"GameId\":16,\"TagId\":21},{\"GameId\":22,\"TagId\":21},{\"GameId\":23,\"TagId\":21},{\"GameId\":28,\"TagId\":21},{\"GameId\":29,\"TagId\":21},{\"GameId\":32,\"TagId\":21},{\"GameId\":36,\"TagId\":21},{\"GameId\":40,\"TagId\":21},{\"GameId\":41,\"TagId\":21},{\"GameId\":47,\"TagId\":21},{\"GameId\":58,\"TagId\":21},{\"GameId\":59,\"TagId\":21},{\"GameId\":66,\"TagId\":21},{\"GameId\":70,\"TagId\":21},{\"GameId\":71,\"TagId\":21},{\"GameId\":73,\"TagId\":21},{\"GameId\":4,\"TagId\":22},{\"GameId\":10,\"TagId\":22},{\"GameId\":13,\"TagId\":22},{\"GameId\":14,\"TagId\":22},{\"GameId\":25,\"TagId\":22},{\"GameId\":36,\"TagId\":22},{\"GameId\":38,\"TagId\":22},{\"GameId\":40,\"TagId\":22},{\"GameId\":54,\"TagId\":22},{\"GameId\":57,\"TagId\":22},{\"GameId\":70,\"TagId\":22},{\"GameId\":12,\"TagId\":23},{\"GameId\":23,\"TagId\":23},{\"GameId\":46,\"TagId\":23},{\"GameId\":52,\"TagId\":23},{\"GameId\":59,\"TagId\":23},{\"GameId\":6,\"TagId\":24},{\"GameId\":23,\"TagId\":24},{\"GameId\":24,\"TagId\":24},{\"GameId\":26,\"TagId\":24},{\"GameId\":34,\"TagId\":24},{\"GameId\":36,\"TagId\":24},{\"GameId\":40,\"TagId\":24},{\"GameId\":46,\"TagId\":24},{\"GameId\":47,\"TagId\":24},{\"GameId\":48,\"TagId\":24},{\"GameId\":49,\"TagId\":24},{\"GameId\":51,\"TagId\":24},{\"GameId\":52,\"TagId\":24},{\"GameId\":57,\"TagId\":24},{\"GameId\":60,\"TagId\":24},{\"GameId\":63,\"TagId\":24},{\"GameId\":65,\"TagId\":24},{\"GameId\":67,\"TagId\":24},{\"GameId\":69,\"TagId\":24},{\"GameId\":70,\"TagId\":24},{\"GameId\":23,\"TagId\":25},{\"GameId\":28,\"TagId\":25},{\"GameId\":31,\"TagId\":25},{\"GameId\":32,\"TagId\":25},{\"GameId\":59,\"TagId\":25}],\"User\":[{\"Id\":1,\"Age\":33,\"Email\":\"[email protected]\",\"FullName\":\"Lorrie Silbert\",\"Username\":\"lsilbert\"},{\"Id\":2,\"Age\":25,\"Email\":\"[email protected]\",\"FullName\":\"Kizzie Mertgen\",\"Username\":\"kmertgen\"},{\"Id\":3,\"Age\":29,\"Email\":\"[email protected]\",\"FullName\":\"Skell Vannini\",\"Username\":\"svannini\"},{\"Id\":4,\"Age\":66,\"Email\":\"[email protected]\",\"FullName\":\"Amargo Putland\",\"Username\":\"aputland\"},{\"Id\":5,\"Age\":24,\"Email\":\"[email protected]\",\"FullName\":\"Velvet Sjollema\",\"Username\":\"vsjollema\"},{\"Id\":6,\"Age\":49,\"Email\":\"[email protected]\",\"FullName\":\"Rebbecca Abbison\",\"Username\":\"rabbison\"},{\"Id\":7,\"Age\":47,\"Email\":\"[email protected]\",\"FullName\":\"Bryana Gunston\",\"Username\":\"bgunston\"},{\"Id\":8,\"Age\":76,\"Email\":\"[email protected]\",\"FullName\":\"Brook Graith\",\"Username\":\"bgraith\"},{\"Id\":9,\"Age\":11,\"Email\":\"[email protected]\",\"FullName\":\"Myles Gillicuddy\",\"Username\":\"mgillicuddy\"},{\"Id\":10,\"Age\":24,\"Email\":\"[email protected]\",\"FullName\":\"Ezri Hellard\",\"Username\":\"ehellard\"},{\"Id\":11,\"Age\":13,\"Email\":\"[email protected]\",\"FullName\":\"Mirabelle Dickson\",\"Username\":\"mdickson\"},{\"Id\":12,\"Age\":33,\"Email\":\"[email protected]\",\"FullName\":\"Bernadina Frontczak\",\"Username\":\"bfrontczak\"},{\"Id\":13,\"Age\":101,\"Email\":\"[email protected]\",\"FullName\":\"Marylin Graveson\",\"Username\":\"mgraveson\"},{\"Id\":14,\"Age\":11,\"Email\":\"[email protected]\",\"FullName\":\"Franklyn Stoter\",\"Username\":\"fstoter\"},{\"Id\":15,\"Age\":83,\"Email\":\"[email protected]\",\"FullName\":\"Burke Corcut\",\"Username\":\"bcorcut\"},{\"Id\":16,\"Age\":94,\"Email\":\"[email protected]\",\"FullName\":\"Arleyne Sikorsky\",\"Username\":\"asikorsky\"},{\"Id\":17,\"Age\":36,\"Email\":\"[email protected]\",\"FullName\":\"Kacy Life\",\"Username\":\"klife\"},{\"Id\":18,\"Age\":42,\"Email\":\"[email protected]\",\"FullName\":\"Gal Smallthwaite\",\"Username\":\"gsmallthwaite\"},{\"Id\":19,\"Age\":65,\"Email\":\"[email protected]\",\"FullName\":\"Kennett Roderighi\",\"Username\":\"kroderighi\"},{\"Id\":20,\"Age\":39,\"Email\":\"[email protected]\",\"FullName\":\"Harland Richardson\",\"Username\":\"hrichardson\"},{\"Id\":21,\"Age\":96,\"Email\":\"[email protected]\",\"FullName\":\"Aguie Tobin\",\"Username\":\"atobin\"},{\"Id\":22,\"Age\":101,\"Email\":\"[email protected]\",\"FullName\":\"Frederick Dedam\",\"Username\":\"fdedam\"},{\"Id\":23,\"Age\":34,\"Email\":\"[email protected]\",\"FullName\":\"Case Belchamber\",\"Username\":\"cbelchamber\"},{\"Id\":24,\"Age\":52,\"Email\":\"[email protected]\",\"FullName\":\"Kathy Carroll\",\"Username\":\"kcarroll\"},{\"Id\":25,\"Age\":25,\"Email\":\"[email protected]\",\"FullName\":\"Wallis Skep\",\"Username\":\"wskep\"},{\"Id\":26,\"Age\":48,\"Email\":\"[email protected]\",\"FullName\":\"Nell Paradyce\",\"Username\":\"nparadyce\"},{\"Id\":27,\"Age\":55,\"Email\":\"[email protected]\",\"FullName\":\"Demeter Sharple\",\"Username\":\"dsharple\"},{\"Id\":28,\"Age\":75,\"Email\":\"[email protected]\",\"FullName\":\"Anita Ruthven\",\"Username\":\"aruthven\"},{\"Id\":29,\"Age\":90,\"Email\":\"[email protected]\",\"FullName\":\"Carlie Gara\",\"Username\":\"cgara\"},{\"Id\":30,\"Age\":12,\"Email\":\"[email protected]\",\"FullName\":\"Sheilah Paprotny\",\"Username\":\"spaprotny\"}],\"Card\":[{\"Id\":1,\"Number\":\"1833 5024 0553 6211\",\"Cvc\":\"903\",\"Type\":0,\"UserId\":1},{\"Id\":2,\"Number\":\"3962 3870 5087 4536\",\"Cvc\":\"700\",\"Type\":1,\"UserId\":12},{\"Id\":3,\"Number\":\"9104 6735 7127 3894\",\"Cvc\":\"985\",\"Type\":0,\"UserId\":12},{\"Id\":4,\"Number\":\"5317 5177 3653 0084\",\"Cvc\":\"963\",\"Type\":1,\"UserId\":11},{\"Id\":5,\"Number\":\"0100 5244 4964 3100\",\"Cvc\":\"227\",\"Type\":0,\"UserId\":11},{\"Id\":6,\"Number\":\"1478 0420 6326 7013\",\"Cvc\":\"845\",\"Type\":1,\"UserId\":11},{\"Id\":7,\"Number\":\"2643 8516 1644 3240\",\"Cvc\":\"808\",\"Type\":0,\"UserId\":10},{\"Id\":8,\"Number\":\"3013 7441 5769 1224\",\"Cvc\":\"703\",\"Type\":1,\"UserId\":10},{\"Id\":9,\"Number\":\"3563 6747 1527 9955\",\"Cvc\":\"727\",\"Type\":0,\"UserId\":10},{\"Id\":10,\"Number\":\"4499 3123 4695 9542\",\"Cvc\":\"444\",\"Type\":0,\"UserId\":9},{\"Id\":11,\"Number\":\"9924 7778 1587 0277\",\"Cvc\":\"603\",\"Type\":1,\"UserId\":9},{\"Id\":12,\"Number\":\"5962 2881 2375 4209\",\"Cvc\":\"022\",\"Type\":0,\"UserId\":8},{\"Id\":13,\"Number\":\"4611 7969 4921 6749\",\"Cvc\":\"519\",\"Type\":1,\"UserId\":8},{\"Id\":14,\"Number\":\"4347 6119 2799 9266\",\"Cvc\":\"492\",\"Type\":0,\"UserId\":7},{\"Id\":15,\"Number\":\"3762 5646 9250 3278\",\"Cvc\":\"111\",\"Type\":0,\"UserId\":7},{\"Id\":16,\"Number\":\"9329 2624 0151 4535\",\"Cvc\":\"689\",\"Type\":1,\"UserId\":7},{\"Id\":17,\"Number\":\"5747 3965 9959 7596\",\"Cvc\":\"463\",\"Type\":1,\"UserId\":6},{\"Id\":18,\"Number\":\"7815 5830 0145 0448\",\"Cvc\":\"249\",\"Type\":0,\"UserId\":5},{\"Id\":19,\"Number\":\"8608 6806 8238 3092\",\"Cvc\":\"081\",\"Type\":1,\"UserId\":5},{\"Id\":20,\"Number\":\"4846 1275 4235 3039\",\"Cvc\":\"268\",\"Type\":1,\"UserId\":5},{\"Id\":21,\"Number\":\"2263 5851 7894 9441\",\"Cvc\":\"192\",\"Type\":1,\"UserId\":4},{\"Id\":22,\"Number\":\"7660 9400 3206 5606\",\"Cvc\":\"600\",\"Type\":1,\"UserId\":4},{\"Id\":23,\"Number\":\"9454 1480 3127 1373\",\"Cvc\":\"904\",\"Type\":1,\"UserId\":4},{\"Id\":24,\"Number\":\"8928 2433 2516 9511\",\"Cvc\":\"468\",\"Type\":1,\"UserId\":3},{\"Id\":25,\"Number\":\"2175 1623 6855 0876\",\"Cvc\":\"760\",\"Type\":1,\"UserId\":3},{\"Id\":26,\"Number\":\"1642 7380 2920 7598\",\"Cvc\":\"908\",\"Type\":0,\"UserId\":3},{\"Id\":27,\"Number\":\"1268 2352 8506 0500\",\"Cvc\":\"693\",\"Type\":1,\"UserId\":2},{\"Id\":28,\"Number\":\"5103 9356 9768 6854\",\"Cvc\":\"493\",\"Type\":0,\"UserId\":29},{\"Id\":29,\"Number\":\"7991 7779 5123 9211\",\"Cvc\":\"340\",\"Type\":0,\"UserId\":13},{\"Id\":30,\"Number\":\"9185 2070 3009 4543\",\"Cvc\":\"518\",\"Type\":1,\"UserId\":30},{\"Id\":31,\"Number\":\"7790 7962 4262 5606\",\"Cvc\":\"966\",\"Type\":0,\"UserId\":13},{\"Id\":32,\"Number\":\"7460 6498 2791 0231\",\"Cvc\":\"068\",\"Type\":0,\"UserId\":15},{\"Id\":33,\"Number\":\"5625 0434 5999 6254\",\"Cvc\":\"570\",\"Type\":1,\"UserId\":1},{\"Id\":34,\"Number\":\"4902 6975 5076 5316\",\"Cvc\":\"091\",\"Type\":0,\"UserId\":1},{\"Id\":35,\"Number\":\"5208 8381 5687 8508\",\"Cvc\":\"624\",\"Type\":0,\"UserId\":28},{\"Id\":36,\"Number\":\"5345 7357 8866 7508\",\"Cvc\":\"212\",\"Type\":1,\"UserId\":27},{\"Id\":37,\"Number\":\"6752 6869 9870 9732\",\"Cvc\":\"719\",\"Type\":1,\"UserId\":27},{\"Id\":38,\"Number\":\"0798 3871 2521 2016\",\"Cvc\":\"036\",\"Type\":0,\"UserId\":26},{\"Id\":39,\"Number\":\"1661 2121 6244 8487\",\"Cvc\":\"289\",\"Type\":0,\"UserId\":26},{\"Id\":40,\"Number\":\"0327 7877 3023 9451\",\"Cvc\":\"939\",\"Type\":0,\"UserId\":25},{\"Id\":41,\"Number\":\"2844 3311 3796 4444\",\"Cvc\":\"137\",\"Type\":0,\"UserId\":24},{\"Id\":42,\"Number\":\"7716 6230 0769 9366\",\"Cvc\":\"656\",\"Type\":1,\"UserId\":24},{\"Id\":43,\"Number\":\"2829 0002 6052 6217\",\"Cvc\":\"259\",\"Type\":1,\"UserId\":24},{\"Id\":44,\"Number\":\"1576 2740 8903 1499\",\"Cvc\":\"355\",\"Type\":0,\"UserId\":23},{\"Id\":45,\"Number\":\"6842 0546 4406 5606\",\"Cvc\":\"538\",\"Type\":0,\"UserId\":23},{\"Id\":46,\"Number\":\"9574 1800 3833 2972\",\"Cvc\":\"512\",\"Type\":1,\"UserId\":22},{\"Id\":47,\"Number\":\"9976 1161 9586 1806\",\"Cvc\":\"596\",\"Type\":1,\"UserId\":22},{\"Id\":48,\"Number\":\"6975 1775 3435 4897\",\"Cvc\":\"857\",\"Type\":1,\"UserId\":21},{\"Id\":49,\"Number\":\"9039 3485 8754 8863\",\"Cvc\":\"936\",\"Type\":1,\"UserId\":21},{\"Id\":50,\"Number\":\"4082 9960 2674 5955\",\"Cvc\":\"598\",\"Type\":1,\"UserId\":20},{\"Id\":51,\"Number\":\"5811 6621 2962 1020\",\"Cvc\":\"375\",\"Type\":0,\"UserId\":20},{\"Id\":52,\"Number\":\"7036 3344 0149 7880\",\"Cvc\":\"094\",\"Type\":1,\"UserId\":19},{\"Id\":53,\"Number\":\"9889 9719 6896 7474\",\"Cvc\":\"612\",\"Type\":1,\"UserId\":18},{\"Id\":54,\"Number\":\"5994 2396 1516 2411\",\"Cvc\":\"318\",\"Type\":0,\"UserId\":18},{\"Id\":55,\"Number\":\"0274 2943 4672 4028\",\"Cvc\":\"517\",\"Type\":0,\"UserId\":18},{\"Id\":56,\"Number\":\"0540 4834 3653 5943\",\"Cvc\":\"943\",\"Type\":1,\"UserId\":17},{\"Id\":57,\"Number\":\"2962 0872 0998 4724\",\"Cvc\":\"638\",\"Type\":0,\"UserId\":17},{\"Id\":58,\"Number\":\"8746 7253 1464 1729\",\"Cvc\":\"756\",\"Type\":1,\"UserId\":16},{\"Id\":59,\"Number\":\"3863 8683 6862 0373\",\"Cvc\":\"640\",\"Type\":1,\"UserId\":16},{\"Id\":60,\"Number\":\"9466 9592 0503 1368\",\"Cvc\":\"753\",\"Type\":0,\"UserId\":14},{\"Id\":61,\"Number\":\"6777 2480 1837 5824\",\"Cvc\":\"533\",\"Type\":0,\"UserId\":30}],\"Purchase\":[{\"Id\":1,\"ProductKey\":\"ZTZ3-0D2S-G4TJ\",\"Type\":1,\"Date\":\"2016-12-07T05:49:00\",\"CardId\":1,\"GameId\":21},{\"Id\":2,\"ProductKey\":\"S2F8-PRE7-17ET\",\"Type\":0,\"Date\":\"2016-09-11T22:27:00\",\"CardId\":16,\"GameId\":39},{\"Id\":3,\"ProductKey\":\"8QBB-2FJ1-X0DS\",\"Type\":0,\"Date\":\"2016-01-28T16:06:00\",\"CardId\":15,\"GameId\":2},{\"Id\":4,\"ProductKey\":\"06UC-X7QA-8HME\",\"Type\":0,\"Date\":\"2016-07-21T23:51:00\",\"CardId\":16,\"GameId\":72},{\"Id\":5,\"ProductKey\":\"MPO5-V59I-MQ4Z\",\"Type\":1,\"Date\":\"2017-10-30T10:16:00\",\"CardId\":15,\"GameId\":25},{\"Id\":6,\"ProductKey\":\"OI20-7YUL-L4ZI\",\"Type\":1,\"Date\":\"2018-02-03T06:38:00\",\"CardId\":13,\"GameId\":19},{\"Id\":7,\"ProductKey\":\"AHGD-O3GX-L6SQ\",\"Type\":0,\"Date\":\"2018-08-08T08:10:00\",\"CardId\":12,\"GameId\":31},{\"Id\":8,\"ProductKey\":\"K6SR-TSRJ-9CKE\",\"Type\":0,\"Date\":\"2017-08-29T17:59:00\",\"CardId\":13,\"GameId\":41},{\"Id\":9,\"ProductKey\":\"GVI2-PVBQ-BPYA\",\"Type\":1,\"Date\":\"2016-07-20T05:12:00\",\"CardId\":10,\"GameId\":56},{\"Id\":10,\"ProductKey\":\"MHMH-MMMV-A49I\",\"Type\":0,\"Date\":\"2018-05-11T04:05:00\",\"CardId\":17,\"GameId\":21},{\"Id\":11,\"ProductKey\":\"2U9D-SBQB-D6Z0\",\"Type\":0,\"Date\":\"2018-06-19T16:00:00\",\"CardId\":10,\"GameId\":49},{\"Id\":12,\"ProductKey\":\"63S5-ZJ4Z-7A9O\",\"Type\":0,\"Date\":\"2016-11-18T05:52:00\",\"CardId\":10,\"GameId\":27},{\"Id\":13,\"ProductKey\":\"DH19-WXJO-NMZK\",\"Type\":0,\"Date\":\"2016-10-21T09:44:00\",\"CardId\":7,\"GameId\":21},{\"Id\":14,\"ProductKey\":\"UE88-QX0A-P39F\",\"Type\":0,\"Date\":\"2018-09-08T17:36:00\",\"CardId\":7,\"GameId\":49},{\"Id\":15,\"ProductKey\":\"1D8W-90IT-EC63\",\"Type\":1,\"Date\":\"2017-08-26T16:56:00\",\"CardId\":9,\"GameId\":28},{\"Id\":16,\"ProductKey\":\"ATU8-UHHB-Z5YN\",\"Type\":0,\"Date\":\"2016-09-27T03:30:00\",\"CardId\":8,\"GameId\":22},{\"Id\":17,\"ProductKey\":\"KQ8E-Q4BF-AN91\",\"Type\":0,\"Date\":\"2016-01-02T19:25:00\",\"CardId\":4,\"GameId\":36},{\"Id\":18,\"ProductKey\":\"WDU1-ICUT-02ZJ\",\"Type\":0,\"Date\":\"2017-01-14T04:09:00\",\"CardId\":4,\"GameId\":42},{\"Id\":19,\"ProductKey\":\"O71F-MZON-6VEK\",\"Type\":0,\"Date\":\"2018-04-19T06:26:00\",\"CardId\":4,\"GameId\":52},{\"Id\":20,\"ProductKey\":\"C1MH-K93U-84R7\",\"Type\":0,\"Date\":\"2016-06-26T12:40:00\",\"CardId\":11,\"GameId\":39},{\"Id\":21,\"ProductKey\":\"RLMG-NBRC-IBMT\",\"Type\":1,\"Date\":\"2017-08-25T06:12:00\",\"CardId\":4,\"GameId\":49},{\"Id\":22,\"ProductKey\":\"XNIC-NWQP-SG1O\",\"Type\":1,\"Date\":\"2016-09-08T17:07:00\",\"CardId\":17,\"GameId\":64},{\"Id\":23,\"ProductKey\":\"GO8S-9YHJ-7ZDA\",\"Type\":0,\"Date\":\"2018-07-20T18:52:00\",\"CardId\":17,\"GameId\":32},{\"Id\":24,\"ProductKey\":\"OAIT-BT43-O4IY\",\"Type\":0,\"Date\":\"2016-11-15T18:07:00\",\"CardId\":30,\"GameId\":56},{\"Id\":25,\"ProductKey\":\"SCZZ-NSHF-5B4R\",\"Type\":1,\"Date\":\"2018-07-25T18:31:00\",\"CardId\":30,\"GameId\":68},{\"Id\":26,\"ProductKey\":\"KSQ3-PTQP-Y1ZY\",\"Type\":0,\"Date\":\"2017-05-11T08:15:00\",\"CardId\":28,\"GameId\":63},{\"Id\":27,\"ProductKey\":\"HR1H-U2QP-FZ13\",\"Type\":1,\"Date\":\"2016-09-12T22:11:00\",\"CardId\":28,\"GameId\":47},{\"Id\":28,\"ProductKey\":\"P0P2-T26Q-BD4G\",\"Type\":1,\"Date\":\"2017-01-20T21:52:00\",\"CardId\":28,\"GameId\":48},{\"Id\":29,\"ProductKey\":\"MVKV-41DL-XY53\",\"Type\":1,\"Date\":\"2016-12-03T23:16:00\",\"CardId\":28,\"GameId\":25},{\"Id\":30,\"ProductKey\":\"1SWT-LB8W-F6A8\",\"Type\":0,\"Date\":\"2017-10-06T17:13:00\",\"CardId\":27,\"GameId\":49},{\"Id\":31,\"ProductKey\":\"Z56Z-3I65-BF2Z\",\"Type\":1,\"Date\":\"2017-07-05T05:17:00\",\"CardId\":27,\"GameId\":6},{\"Id\":32,\"ProductKey\":\"NX2Y-9V53-W2DM\",\"Type\":1,\"Date\":\"2017-12-05T17:03:00\",\"CardId\":17,\"GameId\":54},{\"Id\":33,\"ProductKey\":\"SXVK-BMHK-DDM7\",\"Type\":0,\"Date\":\"2017-08-04T12:34:00\",\"CardId\":26,\"GameId\":4},{\"Id\":34,\"ProductKey\":\"VJME-XGKT-B0G0\",\"Type\":1,\"Date\":\"2017-12-12T09:46:00\",\"CardId\":25,\"GameId\":7},{\"Id\":35,\"ProductKey\":\"J7HW-8TP4-GNP8\",\"Type\":0,\"Date\":\"2017-12-12T04:37:00\",\"CardId\":22,\"GameId\":45},{\"Id\":36,\"ProductKey\":\"GA1H-0C36-FHMG\",\"Type\":0,\"Date\":\"2016-11-27T12:17:00\",\"CardId\":21,\"GameId\":20},{\"Id\":37,\"ProductKey\":\"SKXY-JWKO-RTBB\",\"Type\":1,\"Date\":\"2017-07-31T12:07:00\",\"CardId\":21,\"GameId\":36},{\"Id\":38,\"ProductKey\":\"DR0M-A5NA-32R6\",\"Type\":0,\"Date\":\"2017-12-29T19:37:00\",\"CardId\":22,\"GameId\":24},{\"Id\":39,\"ProductKey\":\"3SAH-F3AI-OASH\",\"Type\":1,\"Date\":\"2017-11-12T03:51:00\",\"CardId\":20,\"GameId\":11},{\"Id\":40,\"ProductKey\":\"JV3D-9UJF-JNE3\",\"Type\":1,\"Date\":\"2017-10-01T01:14:00\",\"CardId\":19,\"GameId\":12},{\"Id\":41,\"ProductKey\":\"D7X0-670A-PQZ1\",\"Type\":0,\"Date\":\"2016-09-13T03:51:00\",\"CardId\":18,\"GameId\":26},{\"Id\":42,\"ProductKey\":\"3MNF-YX2C-XJAM\",\"Type\":1,\"Date\":\"2016-08-29T05:17:00\",\"CardId\":26,\"GameId\":54},{\"Id\":43,\"ProductKey\":\"B74V-1I23-TQ79\",\"Type\":0,\"Date\":\"2018-01-28T00:34:00\",\"CardId\":3,\"GameId\":61},{\"Id\":44,\"ProductKey\":\"6PW2-KB71-V7D6\",\"Type\":1,\"Date\":\"2017-08-31T17:09:00\",\"CardId\":29,\"GameId\":53},{\"Id\":45,\"ProductKey\":\"QDSR-9Q9T-C2RU\",\"Type\":1,\"Date\":\"2018-02-28T08:38:00\",\"CardId\":31,\"GameId\":24},{\"Id\":46,\"ProductKey\":\"M19G-W1F4-VYCX\",\"Type\":1,\"Date\":\"2018-06-22T12:45:00\",\"CardId\":48,\"GameId\":49},{\"Id\":47,\"ProductKey\":\"SUSQ-N2ZI-NYQL\",\"Type\":1,\"Date\":\"2016-04-16T14:45:00\",\"CardId\":46,\"GameId\":28},{\"Id\":48,\"ProductKey\":\"645Z-G6AN-4VT6\",\"Type\":0,\"Date\":\"2017-10-20T11:26:00\",\"CardId\":46,\"GameId\":71},{\"Id\":49,\"ProductKey\":\"S2DD-980Z-PE85\",\"Type\":1,\"Date\":\"2016-04-25T13:53:00\",\"CardId\":46,\"GameId\":52},{\"Id\":50,\"ProductKey\":\"0ZIK-G5HQ-9R77\",\"Type\":0,\"Date\":\"2018-01-15T15:50:00\",\"CardId\":45,\"GameId\":9},{\"Id\":51,\"ProductKey\":\"ER5O-7JYC-AMXD\",\"Type\":1,\"Date\":\"2017-05-16T04:34:00\",\"CardId\":45,\"GameId\":40},{\"Id\":52,\"ProductKey\":\"K8LU-TVAX-13OZ\",\"Type\":0,\"Date\":\"2018-02-24T20:06:00\",\"CardId\":45,\"GameId\":30},{\"Id\":53,\"ProductKey\":\"4ATM-8WL7-PZWJ\",\"Type\":1,\"Date\":\"2018-07-04T18:07:00\",\"CardId\":42,\"GameId\":42},{\"Id\":54,\"ProductKey\":\"XWCY-1SZG-BEIR\",\"Type\":1,\"Date\":\"2016-04-27T18:40:00\",\"CardId\":48,\"GameId\":9},{\"Id\":55,\"ProductKey\":\"9ZNM-P2R5-W7ZK\",\"Type\":0,\"Date\":\"2017-05-17T19:38:00\",\"CardId\":41,\"GameId\":33},{\"Id\":56,\"ProductKey\":\"GDYR-RQQC-CMQH\",\"Type\":0,\"Date\":\"2018-07-10T14:43:00\",\"CardId\":40,\"GameId\":22},{\"Id\":57,\"ProductKey\":\"OA86-KA8J-7F2N\",\"Type\":1,\"Date\":\"2017-03-27T18:19:00\",\"CardId\":38,\"GameId\":13},{\"Id\":58,\"ProductKey\":\"XU6W-X4HF-BWKZ\",\"Type\":0,\"Date\":\"2017-07-20T14:22:00\",\"CardId\":37,\"GameId\":4},{\"Id\":59,\"ProductKey\":\"R1LT-E9ZK-X8PW\",\"Type\":0,\"Date\":\"2017-04-12T06:39:00\",\"CardId\":37,\"GameId\":56},{\"Id\":60,\"ProductKey\":\"7VOD-PWOY-ZQV7\",\"Type\":1,\"Date\":\"2016-06-29T10:42:00\",\"CardId\":35,\"GameId\":39},{\"Id\":61,\"ProductKey\":\"MMIB-6IA6-L2WU\",\"Type\":1,\"Date\":\"2016-04-10T17:40:00\",\"CardId\":35,\"GameId\":3},{\"Id\":62,\"ProductKey\":\"KIJH-7JG6-0BHP\",\"Type\":1,\"Date\":\"2018-01-11T19:46:00\",\"CardId\":35,\"GameId\":17},{\"Id\":63,\"ProductKey\":\"DCU0-S60G-NTQJ\",\"Type\":0,\"Date\":\"2017-01-22T09:33:00\",\"CardId\":35,\"GameId\":70},{\"Id\":64,\"ProductKey\":\"8O03-ZQQJ-KJUA\",\"Type\":1,\"Date\":\"2017-09-10T04:11:00\",\"CardId\":40,\"GameId\":45},{\"Id\":65,\"ProductKey\":\"B6S5-X84D-NBMM\",\"Type\":0,\"Date\":\"2018-01-11T06:49:00\",\"CardId\":48,\"GameId\":70},{\"Id\":66,\"ProductKey\":\"TMPE-77M4-A077\",\"Type\":1,\"Date\":\"2016-02-21T22:11:00\",\"CardId\":51,\"GameId\":62},{\"Id\":67,\"ProductKey\":\"DHZQ-8EJS-HOX6\",\"Type\":0,\"Date\":\"2017-08-02T09:16:00\",\"CardId\":50,\"GameId\":25},{\"Id\":68,\"ProductKey\":\"AZ8M-A9AD-ZVFZ\",\"Type\":0,\"Date\":\"2016-07-05T17:01:00\",\"CardId\":31,\"GameId\":51},{\"Id\":69,\"ProductKey\":\"MJV4-941Z-DQFE\",\"Type\":1,\"Date\":\"2016-02-02T19:38:00\",\"CardId\":60,\"GameId\":49},{\"Id\":70,\"ProductKey\":\"GCMK-QOGE-Q2H9\",\"Type\":0,\"Date\":\"2016-06-11T10:53:00\",\"CardId\":60,\"GameId\":52},{\"Id\":71,\"ProductKey\":\"4OYL-G8L4-8OQA\",\"Type\":0,\"Date\":\"2017-09-16T16:04:00\",\"CardId\":60,\"GameId\":51},{\"Id\":72,\"ProductKey\":\"HZ88-HJJI-B8K6\",\"Type\":0,\"Date\":\"2016-10-24T13:26:00\",\"CardId\":60,\"GameId\":46},{\"Id\":73,\"ProductKey\":\"FLGX-XF4O-DUXD\",\"Type\":0,\"Date\":\"2016-07-26T17:20:00\",\"CardId\":32,\"GameId\":34},{\"Id\":74,\"ProductKey\":\"ENIO-WZ1W-5KZX\",\"Type\":1,\"Date\":\"2017-12-27T05:10:00\",\"CardId\":32,\"GameId\":53},{\"Id\":75,\"ProductKey\":\"E3FH-1WMG-BP5V\",\"Type\":1,\"Date\":\"2018-08-31T15:55:00\",\"CardId\":32,\"GameId\":29},{\"Id\":76,\"ProductKey\":\"L81A-M7PG-OORT\",\"Type\":1,\"Date\":\"2018-06-18T15:45:00\",\"CardId\":59,\"GameId\":59},{\"Id\":77,\"ProductKey\":\"IH4M-JA4K-RWKD\",\"Type\":0,\"Date\":\"2017-08-03T12:48:00\",\"CardId\":57,\"GameId\":73},{\"Id\":78,\"ProductKey\":\"10UI-GAM8-OJC8\",\"Type\":1,\"Date\":\"2017-01-03T16:28:00\",\"CardId\":57,\"GameId\":7},{\"Id\":79,\"ProductKey\":\"45EV-90DX-6BON\",\"Type\":1,\"Date\":\"2017-09-25T05:40:00\",\"CardId\":56,\"GameId\":38},{\"Id\":80,\"ProductKey\":\"Q00V-0I0I-74MJ\",\"Type\":0,\"Date\":\"2018-06-06T20:34:00\",\"CardId\":56,\"GameId\":48},{\"Id\":81,\"ProductKey\":\"WWJ2-5Z74-QVPC\",\"Type\":1,\"Date\":\"2016-09-28T07:57:00\",\"CardId\":54,\"GameId\":74},{\"Id\":82,\"ProductKey\":\"C06F-2JAW-6U0U\",\"Type\":0,\"Date\":\"2016-12-25T12:01:00\",\"CardId\":52,\"GameId\":67},{\"Id\":83,\"ProductKey\":\"66KK-IFY5-7TII\",\"Type\":1,\"Date\":\"2017-02-04T00:11:00\",\"CardId\":52,\"GameId\":28},{\"Id\":84,\"ProductKey\":\"AFKU-9M33-43YU\",\"Type\":1,\"Date\":\"2018-01-22T11:51:00\",\"CardId\":52,\"GameId\":39},{\"Id\":85,\"ProductKey\":\"9PGE-RGDU-BOC5\",\"Type\":0,\"Date\":\"2017-01-18T02:48:00\",\"CardId\":51,\"GameId\":2},{\"Id\":86,\"ProductKey\":\"PVDH-C5X0-AN1G\",\"Type\":0,\"Date\":\"2016-07-04T14:35:00\",\"CardId\":50,\"GameId\":63},{\"Id\":87,\"ProductKey\":\"8XNZ-LD1T-A57U\",\"Type\":0,\"Date\":\"2017-04-01T17:27:00\",\"CardId\":61,\"GameId\":65},{\"Id\":88,\"ProductKey\":\"AYFW-CECP-OPP6\",\"Type\":1,\"Date\":\"2016-09-08T02:54:00\",\"CardId\":30,\"GameId\":55}]}";
        var datasets     = JsonConvert.DeserializeObject <Dictionary <string, IEnumerable <JObject> > >(datasetsJson);

        foreach (var dataset in datasets)
        {
            var entityType = GetType(dataset.Key);
            var entities   = dataset.Value
                             .Select(j => j.ToObject(entityType))
                             .ToArray();

            context.AddRange(entities);
        }

        context.SaveChanges();
    }
예제 #13
0
        public static string ImportUsers(VaporStoreDbContext context, string jsonString)
        {
            var users = JsonConvert.DeserializeObject <UserDto[]>(jsonString);

            var sb         = new StringBuilder();
            var usersToAdd = new List <User>();

            foreach (var userDto in users)
            {
                if (!IsValid(userDto) || userDto.Cards.Length == 0 || !userDto.Cards.All(IsValid))
                {
                    sb.AppendLine("Invalid Data");
                    continue;
                }

                var user = new User
                {
                    FullName = userDto.FullName,
                    Username = userDto.Username,
                    Email    = userDto.Email,
                    Age      = userDto.Age
                };


                foreach (var userDtoCard in userDto.Cards)
                {
                    user.Cards.Add(new Card
                    {
                        Number = userDtoCard.Number,
                        Cvc    = userDtoCard.CVC,
                        Type   = Enum.Parse <CardType>(userDtoCard.Type)
                    });
                }

                usersToAdd.Add(user);
                sb.AppendLine($"Imported {user.Username} with {user.Cards.Count} cards");
            }

            context.AddRange(usersToAdd);
            context.SaveChanges();

            return(sb.ToString().TrimEnd());
        }
예제 #14
0
        public static string ImportUsers(VaporStoreDbContext context, string jsonString)
        {
            StringBuilder sb = new StringBuilder();

            var userDtos = JsonConvert.DeserializeObject <IEnumerable <UserInputModel> >(jsonString);

            HashSet <User> validUsers = new HashSet <User>();

            foreach (var userDto in userDtos)
            {
                if (!IsValid(userDto) ||
                    !userDto.Cards.All(IsValid) ||
                    userDto.Cards.Length == 0)
                {
                    sb.AppendLine(GlobalConstants.ERROR_MESSAGE);
                    continue;
                }

                User user = new User
                {
                    FullName = userDto.FullName,
                    Username = userDto.Username,
                    Age      = userDto.Age,
                    Email    = userDto.Email,
                    Cards    = userDto.Cards.Select(x => new Card
                    {
                        Number = x.Number,
                        Cvc    = x.CVC,
                        Type   = Enum.Parse <CardType>(x.Type)
                    })
                               .ToList()
                };

                validUsers.Add(user);
                sb.AppendLine($"Imported {userDto.Username} with {userDto.Cards.Length} cards");
            }

            context.AddRange(validUsers);
            context.SaveChanges();

            return(sb.ToString().Trim());
        }
예제 #15
0
        public static string ImportPurchases(VaporStoreDbContext context, string xmlString)
        {
            StringBuilder sb = new StringBuilder();

            XmlRootAttribute xmlRoot       = new XmlRootAttribute("Purchases");
            XmlSerializer    xmlSerializer = new XmlSerializer(typeof(PurchaseInputModel[]), xmlRoot);

            using StringReader stringReader = new StringReader(xmlString);

            PurchaseInputModel[] purchaseDtos = (PurchaseInputModel[])xmlSerializer.Deserialize(stringReader);

            HashSet <Purchase> validPurchases = new HashSet <Purchase>();

            foreach (var purchaseDto in purchaseDtos)
            {
                if (!IsValid(purchaseDto))
                {
                    sb.AppendLine(GlobalConstants.ERROR_MESSAGE);
                    continue;
                }

                var date = DateTime.ParseExact(purchaseDto.Date, "dd/MM/yyyy HH:mm", CultureInfo.InvariantCulture);

                Purchase purchase = new Purchase
                {
                    ProductKey = purchaseDto.ProductKey,
                    Type       = Enum.Parse <PurchaseType>(purchaseDto.Type),
                    Date       = date,
                    Game       = context.Games.First(x => x.Name == purchaseDto.GameName),
                    Card       = context.Cards.First(x => x.Number == purchaseDto.CardNumber)
                };

                validPurchases.Add(purchase);
                sb.AppendLine($"Imported {purchaseDto.GameName} for {purchase.Card.User.Username}");
            }

            context.AddRange(validPurchases);
            context.SaveChanges();

            return(sb.ToString().Trim());
        }
예제 #16
0
        public static string ImportUsers(VaporStoreDbContext context, string jsonString)
        {
            var result = new StringBuilder();

            var users = new List <User>();

            var importedUsers = JsonConvert.DeserializeObject <List <ImportUserDto> >(jsonString);

            foreach (var importUserDto in importedUsers)
            {
                if (!IsValid(importUserDto))
                {
                    result.AppendLine("Invalid Data");
                    continue;
                }

                var user = new User
                {
                    Username = importUserDto.Username,
                    Age      = importUserDto.Age,
                    Email    = importUserDto.Email,
                    FullName = importUserDto.FullName,
                    Cards    = importUserDto.Cards.Select(x => new Card
                    {
                        Cvc    = x.Cvc,
                        Number = x.Number,
                        Type   = x.Type
                    }).ToList()
                };

                users.Add(user);
                result.AppendLine($"Imported {user.Username} with {user.Cards.Count} cards");
            }

            context.AddRange(users);
            context.SaveChanges();

            return(result.ToString().TrimEnd());
        }
예제 #17
0
        public static string ImportUsers(VaporStoreDbContext context, string jsonString)
        {
            var userDtos = JsonConvert.DeserializeObject <UserImportDto[]>(jsonString)
                           .ToArray();

            var users = new List <User>();

            var sb = new StringBuilder();

            foreach (var userDto in userDtos)
            {
                if (!IsValid(userDto) || !userDto.Cards.All(IsValid))
                {
                    sb.AppendLine("Invalid Data");
                    continue;
                }

                var cards = userDto.Cards
                            .Select(c => new Card(c.Number, c.Cvc, c.Type))
                            .ToArray();

                users.Add(new User(
                              userDto.FullName,
                              userDto.Username,
                              userDto.Email,
                              userDto.Age,
                              cards));

                sb.AppendLine($"Imported {userDto.Username} with {userDto.Cards.Length} cards");
            }

            context.AddRange(users);
            context.SaveChanges();

            return(sb.ToString().TrimEnd());
        }
예제 #18
0
        public static string ImportGames(VaporStoreDbContext context, string jsonString)
        {
            StringBuilder sb = new StringBuilder();

            var gamesDtos = JsonConvert.DeserializeObject <IEnumerable <GameInputModel> >(jsonString);

            HashSet <Game> validGames = new HashSet <Game>();

            foreach (var game in gamesDtos)
            {
                if (!IsValid(game) ||
                    game.Tags.Length == 0)
                {
                    sb.AppendLine(GlobalConstants.ERROR_MESSAGE);
                    continue;
                }

                if (!context.Developers.Any(d => d.Name == game.Developer))
                {
                    Developer dev = new Developer
                    {
                        Name = game.Developer
                    };

                    context.Developers.Add(dev);
                }

                if (!context.Genres.Any(g => g.Name == game.Genre))
                {
                    Genre genre = new Genre
                    {
                        Name = game.Genre
                    };

                    context.Genres.Add(genre);
                }

                foreach (var tagName in game.Tags)
                {
                    if (!context.Tags.Any(t => t.Name == tagName))
                    {
                        Tag tag = new Tag
                        {
                            Name = tagName
                        };

                        context.Tags.Add(tag);
                    }
                }

                context.SaveChanges();

                var releaseDate = DateTime.ParseExact(game.ReleaseDate, "yyyy-MM-dd", CultureInfo.InvariantCulture);

                Game validGame = new Game
                {
                    Name        = game.Name,
                    Price       = game.Price,
                    ReleaseDate = releaseDate,
                    DeveloperId = context.Developers.First(x => x.Name == game.Developer).Id,
                    GenreId     = context.Genres.First(x => x.Name == game.Genre).Id,
                    GameTags    = game.Tags.Select(x => new GameTag
                    {
                        TagId = context.Tags.First(t => t.Name == x).Id
                    })
                                  .ToList()
                };

                validGames.Add(validGame);
                sb.AppendLine
                    ($"Added {game.Name} ({game.Genre}) with {game.Tags.Length} tags");
            }

            context.AddRange(validGames);
            context.SaveChanges();
            return(sb.ToString().Trim());
        }
예제 #19
0
        public static string ImportGames(VaporStoreDbContext context, string jsonString)
        {
            ImportGameDto[] gameDtos   = JsonConvert.DeserializeObject <ImportGameDto[]>(jsonString);
            StringBuilder   result     = new StringBuilder();
            List <Game>     gamesToAdd = new List <Game>();

            foreach (var gameDto in gameDtos)
            {
                if (!IsValid(gameDto))
                {
                    result.AppendLine(ErrorMessage);
                    throw new Exception(ErrorMessage);
                    continue;
                }
                if (gameDto.Tags.IsNullOrEmpty())
                {
                    result.AppendLine(ErrorMessage);
                    continue;
                }
                DateTime validDate;

                bool isDateValid = DateTime.TryParseExact(gameDto.ReleaseDate, "yyyy-MM-dd", CultureInfo.InvariantCulture,
                                                          DateTimeStyles.None, out validDate);
                if (!isDateValid)
                {
                    result.AppendLine(ErrorMessage);
                    continue;
                }

                Game game = new Game
                {
                };
                if (!gamesToAdd.Any(g => g.Developer.Name == gameDto.Developer))
                {
                    Developer developer = new Developer
                    {
                        Name = gameDto.Developer
                    };
                    game.Developer = developer;
                }
                else
                {
                    Game gameWithDeveloper = gamesToAdd.FirstOrDefault(g => g.Developer.Name == gameDto.Developer);
                    game.Developer = gameWithDeveloper.Developer;
                }
                if (!gamesToAdd.Any(g => g.Genre.Name == gameDto.Genre))
                {
                    Genre genre = new Genre
                    {
                        Name = gameDto.Genre
                    };
                    game.Genre = genre;
                }
                else
                {
                    Game gameWithGenre = gamesToAdd.FirstOrDefault(g => g.Genre.Name == gameDto.Genre);
                    game.Genre = gameWithGenre.Genre;
                }


                foreach (var tag in gameDto.Tags)
                {
                    if (!gamesToAdd.Any(g => g.GameTags.Any(gt => gt.Tag.Name == tag)))
                    {
                        Tag newTag = new Tag
                        {
                            Name = tag
                        };
                        GameTag gameTag = new GameTag
                        {
                            Tag = newTag,
                        };
                        game.GameTags.Add(gameTag);
                    }
                    else
                    {
                        Game    gameWithTag = gamesToAdd.FirstOrDefault(g => g.GameTags.Any(gt => gt.Tag.Name == tag));
                        GameTag gameTag     = gameWithTag.GameTags.FirstOrDefault(gt => gt.Tag.Name == tag);
                        game.GameTags.Add(gameTag);
                    }
                }
                gamesToAdd.Add(game);
                result.AppendLine(
                    String.Format(
                        SuccsessfulImportGameMessage,
                        game.Name,
                        game.Genre.Name,
                        game.GameTags.Count));
            }
            context.AddRange(gamesToAdd);
            context.SaveChanges();
            return(result.ToString().TrimEnd());
        }
예제 #20
0
        public static string ImportPurchases(VaporStoreDbContext context, string xmlString)
        {
            XmlRootAttribute xmlRoot    = new XmlRootAttribute("Purchases");
            XmlSerializer    serializer = new XmlSerializer(typeof(ImportPurchaseDto[]), xmlRoot);

            using StringReader sr = new StringReader(xmlString);

            ImportPurchaseDto[] purchasesDto = (ImportPurchaseDto[])serializer.Deserialize(sr);

            HashSet <Purchase> purchases = new HashSet <Purchase>();

            StringBuilder result = new StringBuilder();

            foreach (ImportPurchaseDto purchaseDto in purchasesDto)
            {
                if (!IsValid(purchaseDto))
                {
                    result.AppendLine(ErrorMessage);
                    continue;
                }

                bool isDateValid = DateTime.TryParseExact(purchaseDto.Date, "dd/MM/yyyy HH:mm",
                                                          CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime date);

                if (!isDateValid)
                {
                    result.AppendLine(ErrorMessage);
                    continue;
                }

                bool isPurchaseValidType = Enum.TryParse(purchaseDto.Type, out PurchaseType type);

                if (!isPurchaseValidType)
                {
                    result.AppendLine(ErrorMessage);
                    continue;
                }

                Card card = context.Cards.FirstOrDefault(c => c.Number == purchaseDto.Card);
                if (card == null)
                {
                    result.AppendLine(ErrorMessage);
                    continue;
                }

                Game game = context.Games.FirstOrDefault(g => g.Name == purchaseDto.Title);
                if (game == null)
                {
                    result.AppendLine(ErrorMessage);
                    continue;
                }

                Purchase purchase = new Purchase()
                {
                    Type       = type,
                    Date       = date,
                    ProductKey = purchaseDto.Key,
                    Card       = card,
                    Game       = game
                };

                purchases.Add(purchase);

                result.AppendLine(string.Format(SuccessfullyImportedPurchaseMessage, purchase.Game.Name, purchase.Card.User.Username));
            }

            context.AddRange(purchases);
            context.SaveChanges();

            return(result.ToString().TrimEnd());
        }
예제 #21
0
        public static string ImportGames(VaporStoreDbContext context, string jsonString)
        {
            var result = new StringBuilder();

            var games = new List <Game>();
            //var gameTags = new List<GameTag>();

            var importedGames = JsonConvert.DeserializeObject <List <ImportGameDto> >(jsonString);
            var developers    = context.Developers.ToList();
            var genres        = context.Genres.ToList();
            var allTags       = context.Tags.ToList();

            foreach (var importGameDto in importedGames)
            {
                if (!IsValid(importGameDto))
                {
                    result.AppendLine("Invalid Data");
                    continue;
                }

                var developer = developers.FirstOrDefault(d => d.Name == importGameDto.Developer);

                if (developer == null)
                {
                    developers.Add(new Developer
                    {
                        Name = importGameDto.Developer
                    });
                    developer = developers.FirstOrDefault(d => d.Name == importGameDto.Developer);
                }

                var genre = genres.FirstOrDefault(g => g.Name == importGameDto.Genre);

                if (genre == null)
                {
                    genres.Add(new Genre
                    {
                        Name = importGameDto.Genre
                    });

                    genre = genres.FirstOrDefault(g => g.Name == importGameDto.Genre);
                }

                var game = new Game
                {
                    Developer   = developer,
                    Genre       = genre,
                    Name        = importGameDto.Name,
                    Price       = importGameDto.Price,
                    ReleaseDate = importGameDto.ReleaseDate
                };

                foreach (var dtoTag in importGameDto.Tags)
                {
                    var tag = allTags.FirstOrDefault(t => t.Name == dtoTag);

                    if (tag == null)
                    {
                        allTags.Add(new Tag {
                            Name = dtoTag
                        });
                        tag = allTags.FirstOrDefault(t => t.Name == dtoTag);
                    }

                    game.GameTags.Add(new GameTag {
                        Game = game, Tag = tag
                    });
                }

                games.Add(game);
                result.AppendLine($"Added {game.Name} ({game.Genre.Name}) with {game.GameTags.Count} tags");
            }

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

            return(result.ToString().TrimEnd());
        }