Ejemplo n.º 1
0
        public async Task <ActionResult <OrderCreateDTO> > Post(OrderCreateDTO newOrder)
        {
            //check if order exists
            var check = await _orderRepo.GetOneOrder(newOrder.OrderId);

            if (check == null)
            {
                var createdOrder = new AppOrder()
                {
                    //order
                    OrderId   = await _orderRepo.IdGen(),
                    OrdererId = newOrder.UserId,
                    Date      = newOrder.Date,
                    Total     = newOrder.Total,

                    //order details
                    PackId  = newOrder.PackId,
                    PackQty = newOrder.PackQty // pack qty saved in order detail db table
                };

                //execute any business logic associated with the order
                createdOrder.Pack = await _packRepo.GetOnePack(createdOrder.PackId);

                createdOrder.Orderer = await _userRepo.GetOneUser(createdOrder.OrdererId);

                createdOrder.CalculateTotal();
                //createdOrder.FillOrder();

                //should just call fillOrder(), will modify later
                Random rand = new Random();
                if (createdOrder.Orderer.CurrencyAmount >= createdOrder.Total)
                {
                    createdOrder.Orderer.CurrencyAmount -= createdOrder.Total;
                    int cards = 5 * createdOrder.PackQty;
                    for (int i = 0; i < cards; ++i)
                    {
                        string  cardId = Convert.ToString(rand.Next(64)); //only grabs from the first 64 cards in the set, PackId = base set number
                        AppCard card   = await _orderRepo.GetCardFromApi(cardId, createdOrder.PackId);

                        createdOrder.Orderer.AddCardToInventory(card); //add to the AppUser
                        await _cardRepo.AddOneCard(card);              //add to card table

                        await _userRepo.AddOneCardToOneUser(createdOrder.OrdererId, card.CardId);
                    }
                }
                else
                {
                    throw new Exception("User funds insufficient.");
                }
                await _userRepo.UpdateUserById(createdOrder.OrdererId, createdOrder.Orderer);

                await _orderRepo.AddOneOrder(createdOrder.PackQty, createdOrder);

                return(CreatedAtAction(nameof(GetOrderById), new { id = createdOrder.OrderId }, createdOrder)); //201 new order created
            }

            return(Conflict()); //order already exists and cant be created
        }