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 }