public CardLibraryDeckAssignment(CardLibraryItem cardLibraryEntry)
        {
            Assert.NotNull(cardLibraryEntry, nameof(cardLibraryEntry));

            this.CardLibraryEntry    = cardLibraryEntry;
            this.ExecutedAssignments = 0;
        }
 public void RemoveCardFromLibrary(CardLibraryItem card, NpgsqlTransaction transaction = null)
 {
     if (card.Quantity > 1)
     {
         DecrementQuantity(card.Card_ID, card.User_ID, transaction);
         --card.Quantity;
     }
     else
     {
         DeleteCard(card.Card_ID, card.User_ID, transaction);
     }
 }
Beispiel #3
0
        public void AcceptTrade(Guid tradeID, Guid tradeOfferID, RequestContext requestContext)
        {
            using (NpgsqlConnection connection = database.CreateAndOpenConnection())
                using (NpgsqlTransaction transaction = connection.BeginTransaction())
                {
                    UserSession session = CookieAuthenticationModule.GetUserSessionFromRequest(requestContext, transaction);

                    Trade      trade = tradeRepository.GetTrade(tradeID, transaction);
                    TradeOffer offer = tradeRepository.GetTradeOffer(tradeOfferID, transaction);

                    if (trade == null)
                    {
                        throw new NotFoundException($"Trade with ID:{trade} could not be found.");
                    }

                    if (offer == null)
                    {
                        throw new NotFoundException($"TradeOffer with ID:{tradeOfferID} could not be found.");
                    }

                    if (trade.User_ID != session.UserID)
                    {
                        throw new InvalidAcceptorException($"Cannot Accept Trade with ID: {trade.Trade_ID}. Invalid User.");
                    }

                    ValidateCardForTrade(trade.Card_ID, trade.User_ID, transaction);
                    ValidateCardForTrade(offer.Card_ID, offer.User_ID, transaction);

                    cardLibraryRepository.AddCardToLibrary(trade.Card_ID, offer.User_ID, transaction);

                    CardLibraryItem tradeItem = cardLibraryRepository.GetCardLibraryItem(trade.Card_ID, trade.User_ID, transaction);
                    cardLibraryRepository.RemoveCardFromLibrary(tradeItem, transaction);

                    cardLibraryRepository.AddCardToLibrary(offer.Card_ID, trade.User_ID, transaction);

                    CardLibraryItem offerItem = cardLibraryRepository.GetCardLibraryItem(offer.Card_ID, offer.User_ID, transaction);
                    cardLibraryRepository.RemoveCardFromLibrary(offerItem, transaction);

                    tradeRepository.DeleteTradeOffer(tradeOfferID, transaction);
                    tradeRepository.DeleteTrade(tradeID, transaction);

                    transaction.Commit();
                }
        }