コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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);
        }