/// <summary> /// Adds a guest to the database and also adds it's likes and dislikes. /// </summary> /// <param name="guest">The Guest.</param> public void Add(Guest guest, Game game) { try { List<ColumnValue> columns = new List<ColumnValue> (); columns.Add (new ColumnValue () { Item1 = "name", Item2 = guest.Name }); columns.Add (new ColumnValue () { Item1 = "avatarId", Item2 = guest.AvatarId.ToString() }); columns.Add (new ColumnValue () { Item1 = "gameId", Item2 = game.Id.ToString() }); guest.Id = (int)this.Insert (columns).LastInsertedId; LikesTable likesTable = new LikesTable (this.entity); foreach (Theme theme in guest.Likes) { likesTable.AddLike (guest, theme, true); } foreach (Theme theme in guest.Dislikes) { likesTable.AddLike (guest, theme, false); } } catch (MySqlException ex) { switch (ex.Number) { case 0: throw new DatabaseException ("Cannot connect to server. Contact administrator", ex); case 1045: throw new DatabaseException ("Invalid username/password, please try again", ex); default: throw new DatabaseException (ex.Message, ex); } } }
/// <summary> /// Saves the specified guest to the database. /// </summary> /// <remarks> /// Also updates it's likes and dislikes (removing old ones and adding new ones) /// </remarks> /// <param name="guest">The guest.</param> public void Save(Guest guest, Game game) { try { if (guest.Id < 0) { return; } List<ColumnValue> columns = new List<ColumnValue> (); columns.Add (new ColumnValue () { Item1 = "name", Item2 = guest.Name }); columns.Add (new ColumnValue () { Item1 = "avatarId", Item2 = guest.AvatarId.ToString() }); columns.Add (new ColumnValue () { Item1 = "gameId", Item2 = game.Id.ToString() }); StatementValue where = new StatementValue (); where.Item1 = "id = @StatementValue0"; where.Item2 = new List<string> (); where.Item2.Add (guest.Id.ToString ()); this.Update (columns, where); LikesTable likesTable = new LikesTable (this.entity); List<Tuple<Theme, bool>> likes = likesTable.GetAll (guest); // Delete removed likes foreach (Tuple<Theme, bool> like in likes) { if (!guest.Likes.Contains (like.Item1) && !guest.Dislikes.Contains (like.Item1)) { likesTable.Delete (guest, like.Item1); } } // Update likes and add new likes foreach (Theme theme in guest.Likes) { Tuple<Theme, bool> findTheme = likes.Find (thmeLike => thmeLike.Item1.Equals (theme)); if (findTheme == null) { likesTable.AddLike (guest, theme, true); } else { if (!findTheme.Item2) likesTable.Save (guest, theme, true); } } foreach (Theme theme in guest.Dislikes) { Tuple<Theme, bool> findTheme = likes.Find (thmeLike => thmeLike.Item1.Equals (theme)); if (findTheme == null) { likesTable.AddLike (guest, theme, false); } else { if (findTheme.Item2) likesTable.Save (guest, theme, false); } } } catch (MySqlException ex) { switch (ex.Number) { case 0: throw new DatabaseException ("Cannot connect to server. Contact administrator", ex); case 1045: throw new DatabaseException ("Invalid username/password, please try again", ex); default: throw new DatabaseException (ex.Message, ex); } } }