public static bool AddCardsToCollectionByEmail(string email, List <Card> cards) { var dbUser = new User(); try { using (var db = new CardGame_v2Entities()) { dbUser = db.AllUsers.Where(u => u.Mail == email).FirstOrDefault(); if (dbUser == null) { throw new Exception("UserDoesNotExist"); } foreach (var c in cards) { var userCC = (from coll in db.AllUserCardCollections where coll.ID_Card == c.ID && coll.ID_User == dbUser.ID select coll) .FirstOrDefault(); if (userCC == null) //User does not own card, add to collection { var cc = new UserCardCollection(); cc.Card = db.AllCards.Find(c.ID); cc.User = dbUser; cc.NumberOfCards = 1; dbUser.AllUserCardCollections.Add(cc); db.SaveChanges(); } else //User owns card, add to num { userCC.NumberOfCards += 1; db.Entry(userCC).State = EntityState.Modified; db.SaveChanges(); } } //db.SaveChanges(); return(true); } } catch (Exception e) { Writer.LogError(e); return(false); } }
public static BuyResult ExecuteOrder(int idPerson, int idPack) { BuyResult result = BuyResult.Success; using (var db = new CardGame_v2Entities()) { VirtualPurchase order = new VirtualPurchase(); order.ID_CardPack = idPack; order.ID_User = idPerson; order.PurchaseDate = DateTime.Now; order.NumberOfPacks = 1; db.AllVirtualPurchases.Add(order); db.SaveChanges(); /// ermittle User und Pack für übergebene IDs User user = db.AllUsers.FirstOrDefault(x => x.ID == idPerson); CardPack pack = db.AllCardPacks.FirstOrDefault(x => x.ID == idPack); // prüfe auf ungültige Daten if (user == null) { throw new ArgumentException("Ungültige idPerson"); } if (pack == null) { throw new ArgumentException("Ungültige idPack"); } /// prüfe ob user genügend IngameGeld hat! if (user.AmountMoney < pack.PackPrice) { result = BuyResult.NotEnoughDiamonds; } else { /// ziehe Preis vom pack beim User ab! user.AmountMoney -= pack.PackPrice; /// Ermittle die Karten die der User (im Pack) jetzt gekauft hat! Random rnd = new Random(); int numberOfAllCards = db.AllCards.Count(); for (int i = 0; i < pack.NumCards; i++) { /// ermittle einen zufälligen Index einer möglichen Karte int rng = rnd.Next(0, numberOfAllCards); /// überspringe alle karten VOR diesem Index (daher auch: rng-1) /// und nimm danach die nächste Karte var card = db.AllCards.OrderBy(x => x.ID).Skip(rng - 1).Take(1).Single(); /// ermittle nun ob der User DIESE Karte schon einmal hat UserCardCollection coll = user.AllUserCardCollections.Where(x => x.ID_Card == card.ID).FirstOrDefault(); //card if (coll != null) /// user hat diese karte schon einmal { coll.NumberOfCards++; } else /// user hat Karte noch nicht { /// also füge sie genau 1x hinzu coll = new UserCardCollection() { ID_User = user.ID, ID_Card = card.ID, NumberOfCards = 1 }; db.AllUserCardCollections.Add(coll); } } db.SaveChanges(); } } return(result); }