public IHttpActionResult PutUsers(int id, Users users) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if (id != users.Id) { return(BadRequest()); } db.Entry(users).State = EntityState.Modified; try { db.SaveChanges(); } catch (DbUpdateConcurrencyException) { if (!UsersExists(id)) { return(NotFound()); } else { throw; } } return(StatusCode(HttpStatusCode.NoContent)); }
static void Main() { var db = new DiabloEntities(); var xmlDoc = XDocument.Load("../../users-and-games.xml"); var xUsers = xmlDoc.XPathSelectElements("users/user"); foreach (var user in xUsers) { var dbUser = new User(); var userName = user.Attribute("username").Value; if (db.Users.Any(u => u.Username == userName)) { Console.WriteLine("User {0} already exists", userName); dbUser = db.Users.FirstOrDefault(u => u.Username == userName); continue; } else { dbUser.Username = userName; dbUser.IsDeleted = Convert.ToBoolean(int.Parse(user.Attribute("is-deleted").Value) == 0 ? "false" : "true"); dbUser.IpAddress = user.Attribute("ip-address").Value; dbUser.RegistrationDate = DateTime.Parse(user.Attribute("registration-date").Value); var firstName = user.Attribute("first-name"); if (firstName != null) dbUser.FirstName = firstName.Value; var lastName = user.Attribute("last-name"); if (lastName != null) dbUser.FirstName = lastName.Value; var email = user.Attribute("email"); if (email != null) dbUser.FirstName = email.Value; db.Users.Add(dbUser); db.SaveChanges(); Console.WriteLine("Successfully added user {0}", userName); } var games = user.XPathSelectElements("games/game"); foreach (var gameXml in games) { var game = new UsersGame(); var gameName = gameXml.Element("game-name").Value; var characterName = gameXml.Element("character").Attribute("name").Value; var currGame = db.Games.FirstOrDefault(g => g.Name == gameName); var currCharacter = db.Characters.FirstOrDefault(g => g.Name == characterName); game.GameId = currGame.Id; game.UserId = dbUser.Id; game.CharacterId = currCharacter.Id; game.Cash = decimal.Parse(gameXml.Element("character").Attribute("cash").Value); game.Level = int.Parse(gameXml.Element("character").Attribute("level").Value); game.JoinedOn = DateTime.Parse(gameXml.Element("joined-on").Value); db.SaveChanges(); Console.WriteLine("User {0} successfully added to game {1}", userName, gameXml.Element("game-name").Value); } } }
private static void ProcessGames(IEnumerable<XElement> games, User user, DiabloEntities context) { foreach (var gm in games) { var gameName = gm.Element("game-name").Value; var characterName = gm.Element("character").Attribute("name").Value; var characterCash = gm.Element("character").Attribute("cash").Value; var characterLevel = gm.Element("character").Attribute("level").Value; var joinedOn = gm.Element("joined-on").Value; var game = context.Games.FirstOrDefault(g => g.Name == gameName); var character = context.Characters.FirstOrDefault(c => c.Name == characterName); if (game != null && character != null) { var userGame = new UsersGame() { Game = game, User = user, Character = character, Level = int.Parse(characterLevel), JoinedOn = DateTime.Parse(joinedOn), Cash = decimal.Parse(characterCash) }; if ( !context.UsersGames.Any( ug => ug.Game.Name == game.Name && ug.User.Username == user.Username && ug.Character.Name == character.Name)) { context.UsersGames.Add(userGame); context.SaveChanges(); Console.WriteLine("User {0} successfully added to game {1}", userGame.User.Username, userGame.Game.Name); } } } }
private static void ImportUsersAndGames(XElement userNode, DiabloEntities context) { var username = userNode.Attribute("username").Value; if (GetUserByUsername(username, context) != null) { throw new InvalidOperationException(string.Format( "User {0} already exists", username)); } bool isDeleted = int.Parse(userNode.Attribute("is-deleted").Value) == 0; var regDate = ParseDate(userNode.Attribute("registration-date").Value); var ipAddress = userNode.Attribute("ip-address").Value; var user = new User() { Username = username, IsDeleted = isDeleted, RegistrationDate = regDate, IpAddress = ipAddress }; var firstName = userNode.Attribute("first-name"); if (firstName != null) { user.FirstName = firstName.Value; } var lastName = userNode.Attribute("last-name"); if (lastName != null) { user.LastName = lastName.Value; } var email = userNode.Attribute("email"); if (email != null) { user.Email = email.Value; } context.Users.Add(user); Console.WriteLine("Successfully added user {0}", username); var games = userNode.XPathSelectElements("games/game"); foreach (var gameNode in games) { ImportGame(context, gameNode, user, username); } context.SaveChanges(); }
static void Main() { var context = new DiabloEntities(); var xml = new XmlDocument(); xml.Load("../../users-and-games.xml"); var rootNode = xml.DocumentElement; foreach (XmlNode user in rootNode.ChildNodes) { var username = user.Attributes["username"].Value; var ipAddress = user.Attributes["ip-address"].Value; DateTime registrationDate = DateTime.Parse(user.Attributes["registration-date"].Value); bool isDeleted = false; string lastName = null; string firstName = null; string email = null; if (user.Attributes["first-name"] != null) { firstName = user.Attributes["first-name"].Value; } if (user.Attributes["last-name"] != null) { lastName = user.Attributes["last-name"].Value; } if (user.Attributes["email"] != null) { email = user.Attributes["email"].Value; } if (int.Parse(user.Attributes["is-deleted"].Value) == 1) { isDeleted = true; } if (context.Users.Any(u => u.Username == username)) { Console.WriteLine("User {0} already exists", username); continue; } var userGames = rootNode.SelectSingleNode("user/games"); // Loop through all games for the given user foreach (XmlNode game in userGames) { var gameName = game["game-name"].InnerText; var character = game["character"]; var characterName = character.Attributes["name"].Value; var characterCash = decimal.Parse(character.Attributes["cash"].Value); var characterLevel = int.Parse(character.Attributes["level"].Value); var joinedOn = DateTime.Parse(game["joined-on"].InnerText); Console.WriteLine(joinedOn); if (game["joined-on"] != null && user.Attributes["registration-date"] != null) { var userGame = new UsersGame() { Cash = characterCash, Character = context.Characters.FirstOrDefault(c => c.Name == characterName), Game = context.Games.FirstOrDefault(g => g.Name == gameName), JoinedOn = joinedOn, Level = characterLevel, User = new User() { FirstName = firstName, LastName = lastName, Email = email, Username = username, IpAddress = ipAddress, RegistrationDate = registrationDate, IsDeleted = isDeleted } }; context.UsersGames.Add(userGame); Console.WriteLine("Successfully added user {0}", username); Console.WriteLine("User {0} successfully added to game {1}", username, gameName); } } context.SaveChanges(); } }
static void Main() { string fileName = "../../users-and-games.xml"; var context = new DiabloEntities(); XmlDocument xmlDocument = new XmlDocument(); xmlDocument.Load(fileName); XmlNode rootNode = xmlDocument.DocumentElement; foreach (XmlNode user in rootNode.ChildNodes) { try { if (user.Attributes.Count > 0) { string firstName = null, lastName = null, email = null, username = null, ip = null; DateTime regDate = DateTime.MinValue; bool isDeleted = false; User userFromDb = new User(); foreach (XmlAttribute attribute in user.Attributes) { if (attribute.Name == "first-name") { firstName = attribute.Value; } if (attribute.Name == "last-name") { lastName = attribute.Value; } if (attribute.Name == "username") { username = attribute.Value; } if (attribute.Name == "email") { email = attribute.Value; } if (attribute.Name == "ip-address") { ip = attribute.Value; } if (attribute.Name == "is-deleted") { isDeleted = attribute.Value == "1"; } if (attribute.Name == "registration-date") { regDate = DateTime.ParseExact(attribute.Value, "dd/mm/yyyy", CultureInfo.InvariantCulture); } } userFromDb = context.Users .FirstOrDefault(u => u.Username == username); if (userFromDb == null) { userFromDb = new User() { Username = username, FirstName = firstName, LastName = lastName, Email = email, RegistrationDate = regDate, IsDeleted = isDeleted, IpAddress = ip }; context.Users.Add(userFromDb); Console.WriteLine("Successfully added user {0}", username); } else { Console.WriteLine("User {0} already exists", username); throw new ArgumentException("User already exists"); } foreach (XmlNode game in user.FirstChild.ChildNodes) { string gameName = "", characterName = ""; int? gameId, userId, characterId, level = null; DateTime?joinedOn = null; decimal? cash = null; Game gameFromDb = new Game(); if (game["game-name"] != null) { gameName = game["game-name"].InnerText; } if (game["character"] != null) { foreach (XmlAttribute attribute in game["character"].Attributes) { if (attribute.Name == "name") { characterName = attribute.Value; } if (attribute.Name == "cash") { cash = decimal.Parse(attribute.Value); } if (attribute.Name == "level") { level = int.Parse(attribute.Value); } } } if (game["joined-on"] != null) { joinedOn = DateTime.ParseExact(game["joined-on"].InnerText, "dd/mm/yyyy", CultureInfo.InvariantCulture); } gameFromDb = context.Games .FirstOrDefault(g => g.Name == gameName); if (gameFromDb == null) { throw new ArgumentException("No such game exists"); } gameId = gameFromDb.Id; if (userFromDb == null) { throw new ArgumentException("User already exists"); } userId = userFromDb.Id; Character character = context.Characters .FirstOrDefault(c => c.Name == characterName); characterId = character.Id; context.UsersGames.Add(new UsersGame() { GameId = gameId.Value, User = userFromDb, CharacterId = characterId.Value, Level = level.Value, JoinedOn = joinedOn.Value, Cash = cash.Value }); Console.WriteLine("User {0} successfully added to game {1}", username, gameName); } } context.SaveChanges(); } catch (ArgumentException ex) { } } }
private static User ProcessUsers(XElement us, DiabloEntities context) { var username = us.Attribute("username").Value; var regDate = us.Attribute("registration-date").Value; var isDeleted = us.Attribute("is-deleted").Value; var ipAddress = us.Attribute("ip-address").Value; string firstName = null; string lastName = null; string email = null; if (us.Attribute("first-name") != null) { firstName = us.Attribute("first-name").Value; } if (us.Attribute("last-name") != null) { lastName = us.Attribute("last-name").Value; } if (us.Attribute("email") != null) { email = us.Attribute("email").Value; } var user = context.Users.FirstOrDefault(u => u.Username == username); if (user == null) { user = new User() { Username = username, FirstName = firstName, LastName = lastName, RegistrationDate = DateTime.Parse(regDate), IsDeleted = int.Parse(isDeleted) != 0, IpAddress = ipAddress, Email = email }; context.Users.Add(user); context.SaveChanges(); Console.WriteLine("Successfully added user {0}", username); } else { Console.WriteLine("User {0} already exists", username); } return user; }
public static void Main() { Thread.CurrentThread.CurrentCulture = new CultureInfo("DE-de"); var context = new DiabloEntities(); XmlDocument docUsers = new XmlDocument(); docUsers.Load("..//..//..//..//data//users-and-games.xml"); string usersPath = "/users/user"; XmlNodeList userNodes = docUsers.SelectNodes(usersPath); string gamesPath = "games/game"; foreach (XmlNode userNode in userNodes) { string username = userNode.Attributes["username"].Value; User user = context.Users.Where(u => u.Username == username).FirstOrDefault(); if (user != null) { Console.WriteLine("User {0} already exists", user.Username); continue; } user = new User() { FirstName = userNode.Attributes["first-name"] != null ? userNode.Attributes["first-name"].Value : null, LastName = userNode.Attributes["last-name"] != null ? userNode.Attributes["last-name"].Value : null, Username = username, Email = userNode.Attributes["email"] != null ? userNode.Attributes["email"].Value : null, IpAddress = userNode.Attributes["ip-address"].Value, IsDeleted = Convert.ToBoolean(int.Parse(userNode.Attributes["is-deleted"].Value)), RegistrationDate = DateTime.Parse(userNode.Attributes["registration-date"].Value) }; context.Users.Add(user); XmlNodeList xmlGames = userNode.SelectNodes(gamesPath); foreach (XmlNode xmlGame in xmlGames) { string gameName = xmlGame.SelectSingleNode("game-name").InnerText; string characterName = xmlGame.SelectSingleNode("character").Attributes["name"].Value; decimal cash = decimal.Parse(xmlGame.SelectSingleNode("character").Attributes["cash"].Value); int level = int.Parse(xmlGame.SelectSingleNode("character").Attributes["level"].Value); DateTime joinedOn = DateTime.Parse(xmlGame.SelectSingleNode("joined-on").InnerText); var userGame = new UsersGame() { //Game name is a non-unique field in the database and duplicates exist. For the task we //admit that we take the first game with this name. Game = context.Games.Where(g => g.Name == gameName).First(), User = user, Character = context.Characters.Where(c => c.Name == characterName).First(), Cash = cash, Level = level, JoinedOn = joinedOn }; context.UsersGames.Add(userGame); } context.SaveChanges(); //As per the problem terms we can't add a user if any of his games fail to add. //That's why we save changes after all the UserGames are in context. If agame fails to add, //the user won't be added. We print the user and its games only in case of a successful add in //the context var addedUser = context.Users .Where(u => u.Username == username) .Select(u => new { u.Username, UserGames = u.UsersGames.Select(ug => ug.Game.Name) }) .First(); Console.WriteLine("Successfully added user " + addedUser.Username); foreach (var game in user.UsersGames) { Console.WriteLine("User {0} successfully added to game {1}", user.Username, game.Game.Name); } } }
private static void ProcessUserBatch(DiabloEntities context, XElement user) { // Optional string firstName = null; string lastName = null; string email = null; if (user.Attribute("first-name") != null) { firstName = user.Attribute("first-name").Value; } if (user.Attribute("last-name") != null) { lastName = user.Attribute("last-name").Value; } if (user.Attribute("email") != null) { email = user.Attribute("email").Value; } // Required ValidateRequired(user); var username = user.Attribute("username").Value; var ip = user.Attribute("ip-address").Value; var deleted = int.Parse(user.Attribute("is-deleted").Value); var isDeleted = true; if (deleted == 0) { isDeleted = false; } var registrationDate = DateTime.ParseExact(user.Attribute("registration-date").Value, DateTimeFormat, CultureInfo.InvariantCulture); var dbUser = context.Users.FirstOrDefault(u => u.Username == username); if (dbUser != null) { var message = string.Format("User {0} already exists", username); throw new ArgumentException(message); } var xmlUser = new User() { FirstName = firstName, LastName = lastName, Email = email, Username = username, IpAddress = ip, IsDeleted = isDeleted, RegistrationDate = registrationDate }; var gameMessages = new List <string>(); var games = user.Elements(); foreach (var game in games.Elements()) { var userGame = ProcessGame(context, game); xmlUser.UsersGames.Add(userGame); var gameMessage = string.Format("User {0} successfully added to game {1}", xmlUser.Username, userGame.Game.Name); gameMessages.Add(gameMessage); } context.Users.Add(xmlUser); context.SaveChanges(); Console.WriteLine("Successfully added user {0}", xmlUser.Username); Console.WriteLine(string.Join("\n", gameMessages)); }
private static User CreateUserIfNotExists(DiabloEntities context, XElement xUser) { User user = null; var xUsername = xUser.Attribute("username").Value; user = context.Users.FirstOrDefault(u => u.Username == xUsername); if (user != null) { Console.WriteLine("User {0} already exists", xUsername); } else { var isDeleted = true; if (int.Parse(xUser.Attribute("is-deleted").Value) == 0) { isDeleted = false; } var ip = xUser.Attribute("ip-address").Value; var regDate = xUser.Attribute("registration-date").Value; string format = "dd/MM/yyyy"; DateTime regDateToImport = DateTime.ParseExact(regDate, format, CultureInfo.InvariantCulture); var firstNameAtt = xUser.Attribute("first-name"); var lastNameAtt = xUser.Attribute("last-name"); var emailAtt = xUser.Attribute("email"); string firstName = null; string lastName = null; string email = null; if (firstNameAtt != null) { firstName = firstNameAtt.Value; } if (lastNameAtt != null) { lastName = lastNameAtt.Value; } if (emailAtt != null) { email = emailAtt.Value; } user = new User { Username = xUsername, FirstName = firstName, LastName = lastName, Email = email, IpAddress = ip, RegistrationDate = regDateToImport, IsDeleted = isDeleted }; context.Users.Add(user); context.SaveChanges(); Console.WriteLine("Successfully added user {0}", xUsername); } return(user); }
private static void ProcessUserBatch(DiabloEntities context, XElement user) { // Optional string firstName = null; string lastName = null; string email = null; if (user.Attribute("first-name") != null) { firstName = user.Attribute("first-name").Value; } if (user.Attribute("last-name") != null) { lastName = user.Attribute("last-name").Value; } if (user.Attribute("email") != null) { email = user.Attribute("email").Value; } // Required ValidateRequired(user); var username = user.Attribute("username").Value; var ip = user.Attribute("ip-address").Value; var deleted = int.Parse(user.Attribute("is-deleted").Value); var isDeleted = true; if (deleted == 0) { isDeleted = false; } var registrationDate = DateTime.ParseExact(user.Attribute("registration-date").Value, DateTimeFormat, CultureInfo.InvariantCulture); var dbUser = context.Users.FirstOrDefault(u => u.Username == username); if (dbUser != null) { var message = string.Format("User {0} already exists", username); throw new ArgumentException(message); } var xmlUser = new User() { FirstName = firstName, LastName = lastName, Email = email, Username = username, IpAddress = ip, IsDeleted = isDeleted, RegistrationDate = registrationDate }; var gameMessages = new List<string>(); var games = user.Elements(); foreach (var game in games.Elements()) { var userGame = ProcessGame(context, game); xmlUser.UsersGames.Add(userGame); var gameMessage = string.Format("User {0} successfully added to game {1}", xmlUser.Username, userGame.Game.Name); gameMessages.Add(gameMessage); } context.Users.Add(xmlUser); context.SaveChanges(); Console.WriteLine("Successfully added user {0}", xmlUser.Username); Console.WriteLine(string.Join("\n", gameMessages)); }
static void Main() { var context = new DiabloEntities(); var xmlDoc = XDocument.Load(@"..\..\..\users-and-games.xml"); var allUsers = xmlDoc.XPathSelectElements("users/user"); foreach (var xElement in allUsers) { string firstName = null; if (xElement.Attribute("first-name") != null) { firstName = xElement.Attribute("first-name").Value; } string lastName = null; if (xElement.Attribute("last-name") != null) { lastName = xElement.Attribute("last-name").Value; } string email = null; if (xElement.Attribute("email") != null) { email = xElement.Attribute("email").Value; } string username = xElement.Attribute("username").Value; string ip = xElement.Attribute("ip-address").Value; DateTime registeredOn = DateTime.Parse(xElement.Attribute("registration-date").Value); bool isDeleted = xElement.Attribute("is-deleted").Value.Equals("1"); var dbUser = context.Users.FirstOrDefault(u => u.Username == username); if (dbUser == null) { var newUser = new User() { FirstName = firstName, LastName = lastName, Email = email, Username = username, IpAddress = ip, RegistrationDate = registeredOn, IsDeleted = isDeleted }; context.Users.Add(newUser); context.SaveChanges(); Console.WriteLine("Successfully added user {0}", username); var userGames = xElement.XPathSelectElements("games/game"); foreach (var userGame in userGames) { var gameName = userGame.Element("game-name").Value; var character = userGame.Element("character"); var charName = character.Attribute("name").Value; var cash = Decimal.Parse(character.Attribute("cash").Value); var level = int.Parse(character.Attribute("level").Value); DateTime joinedOn = DateTime.Parse(userGame.Element("joined-on").Value); var addUserToGame = new UsersGame() { GameId = context.Games.FirstOrDefault(g => g.Name.Equals(gameName)).Id, UserId = context.Users.FirstOrDefault(u => u.Username.Equals(username)).Id, CharacterId = context.Characters.FirstOrDefault(c => c.Name.Equals(charName)).Id, Level = level, JoinedOn = joinedOn, Cash = cash }; context.UsersGames.Add(addUserToGame); context.SaveChanges(); Console.WriteLine("User {0} successfully added to game {1}", username, gameName); } } else { Console.WriteLine("User {0} already exists", username); } } }
static void Main() { var diabloContext = new DiabloEntities(); Queue <string> output = new Queue <string>(); var xmlDocument = XDocument.Load("../../users-and-games.xml"); var userNodes = xmlDocument.XPathSelectElements("/users/user"); List <UserDTO> users = new List <UserDTO>(); var allUsers = diabloContext.Users.ToList(); var allCharacters = diabloContext.Characters.ToList(); var allUsersGames = diabloContext.UsersGames.ToList(); var allGames = diabloContext.Games.ToList(); foreach (var userNode in userNodes) { UserDTO currentUser = null; string firstName = null; string lastName = null; string email = null; string username = userNode.Attribute("username").Value; bool isDeleted = userNode.Attribute("is-deleted").Value == "1"; string ipAddress = userNode.Attribute("ip-address").Value; DateTime registrationDate = Convert.ToDateTime(userNode.Attribute("registration-date").Value); if (userNode.Attribute("first-name") != null) { firstName = userNode.Attribute("first-name").Value; } if (userNode.Attribute("last-name") != null) { lastName = userNode.Attribute("last-name").Value; } if (userNode.Attribute("email") != null) { email = userNode.Attribute("email").Value; } currentUser = new UserDTO() { FirstName = firstName, LastName = lastName, Username = username, Email = email, IsDeleted = isDeleted, IpAddress = ipAddress, RegistrationDate = registrationDate }; var gameNodes = userNode.XPathSelectElements("games/game"); foreach (var gameNode in gameNodes) { XElement characterNode = gameNode.XPathSelectElement("character"); string gameName = gameNode.XPathSelectElement("game-name").Value; DateTime joinedOn = Convert.ToDateTime(gameNode.XPathSelectElement("joined-on").Value); string characterName = characterNode.Attribute("name").Value; decimal characterCash = Decimal.Parse(characterNode.Attribute("cash").Value); int characterLevel = int.Parse(characterNode.Attribute("level").Value); CharacterDTO currentCharacter = new CharacterDTO() { Name = characterName, Cash = characterCash, Level = characterLevel }; GameDTO currentGame = new GameDTO() { Name = gameName, JoinedOn = joinedOn, Character = currentCharacter }; currentUser.Games.Add(currentGame); } users.Add(currentUser); } foreach (var user in users) { var currentUser = allUsers.Where(u => u.Username == user.Username).FirstOrDefault(); if (currentUser == null) { currentUser = new User() { Username = user.Username, FirstName = user.FirstName, LastName = user.LastName, Email = user.Email, RegistrationDate = user.RegistrationDate, IsDeleted = user.IsDeleted, IpAddress = user.IpAddress, UsersGames = new HashSet <UsersGame>() }; diabloContext.Users.Add(currentUser); output.Enqueue(string.Format("Successfully added user {0}", currentUser.Username)); foreach (var game in user.Games) { UsersGame currentGame = new UsersGame() { GameId = allGames.Where(g => g.Name == game.Name).Select(g => g.Id).FirstOrDefault(), Level = game.Character.Level, Cash = game.Character.Cash, Character = allCharacters.Where(c => c.Name == game.Character.Name).FirstOrDefault(), JoinedOn = game.JoinedOn }; currentUser.UsersGames.Add(currentGame); output.Enqueue(string.Format("User {0} successfully added to game {1}", user.Username, game.Name)); } } else { output.Enqueue(string.Format("User {0} already exists", currentUser.Username)); } diabloContext.SaveChanges(); } while (output.Count > 0) { Console.WriteLine(output.Dequeue()); } }