Exemple #1
0
        public async Task <ActionResult <TradeCreateDTO> > Post(TradeCreateDTO newTrade)
        {
            //check if trade already exists
            Console.WriteLine("ID: " + newTrade.TradeId);
            //var trade = _tradeRepo.GetOneTrade(newTrade.TradeId);
            TradeReadDTO trade = null;

            if (trade == null)
            {
                string newTradeId = await _tradeRepo.IdGen();

                AppUser buyer = await _userRepo.GetOneUser(newTrade.BuyerId);

                AppUser offerer = await _userRepo.GetOneUser(newTrade.OffererId);

                AppCard card = await _cardRepo.GetOneCard(newTrade.OfferCardId);

                var appTrade = new AppTrade()
                {
                    TradeId   = newTradeId,
                    OffererId = offerer.UserId,
                    //BuyerId = buyer.UserId, dont need when creating a trade only updating
                    TradeDate = newTrade.TradeDate,
                    IsClosed  = false, //should always be false when creating
                    //tradeDetails
                    OfferCardId = card.CardId,
                    //BuyerCardId = newTrade.BuyerCardId dont need when creating a trade only updating
                };
                var tradeDTO = new TradeReadDTO
                {
                    TradeId   = newTradeId,
                    OffererId = newTrade.OffererId,
                    //BuyerId = newTrade.BuyerId,
                    IsClosed  = newTrade.IsClosed,
                    TradeDate = newTrade.TradeDate,
                    //TradeDetails
                    OfferCardId = newTrade.TradeId
                };

                await _tradeRepo.AddOneTrade(appTrade);

                return(CreatedAtAction(nameof(GetTradeById), new { id = tradeDTO.TradeId }, tradeDTO));
            }

            return(Conflict());
        }
Exemple #2
0
        public async Task <ActionResult <TradeCreateDTO> > UpdateTradeById(string id, TradeCreateDTO tradeDTO)
        {
            var trade = await _tradeRepo.GetOneTrade(tradeDTO.TradeId);

            //update if trade is found
            if (trade != null)
            {
                var appTrade = new AppTrade()
                {
                    TradeId   = tradeDTO.TradeId,
                    OffererId = tradeDTO.OffererId,
                    BuyerId   = tradeDTO.BuyerId,
                    TradeDate = tradeDTO.TradeDate,
                    IsClosed  = tradeDTO.IsClosed,
                    //tradeDetails
                    OfferCardId = tradeDTO.OfferCardId,
                    BuyerCardId = tradeDTO.BuyerCardId
                };

                AppCard offercard = await _cardRepo.GetOneCard(tradeDTO.OfferCardId);

                AppCard buyercard = await _cardRepo.GetOneCard(tradeDTO.BuyerCardId);

                //perform business logic after updating the AppTrade
                if (appTrade.IsClosed && appTrade.BuyerId != null)
                {
                    appTrade.Buyer = await _userRepo.GetOneUser(appTrade.BuyerId);

                    appTrade.Offerer = await _userRepo.GetOneUser(appTrade.OffererId);

                    appTrade.BuyerCardId = buyercard.CardId;
                    appTrade.OfferCardId = offercard.CardId;
                    //appTrade.MakeTrade();


                    await _userRepo.AddOneCardToOneUser(appTrade.BuyerId, offercard.CardId);

                    await _userRepo.AddOneCardToOneUser(appTrade.OffererId, buyercard.CardId);

                    await _userRepo.DeleteOneCardOfOneUser(appTrade.BuyerId, buyercard.CardId);

                    await _userRepo.DeleteOneCardOfOneUser(appTrade.OffererId, offercard.CardId);
                }

                bool result = await _tradeRepo.UpdateTradeById(id, appTrade);

                if (result)
                {
                    return(NoContent()); //update successfull
                }
                else
                {
                    return(BadRequest()); //something wrong with update
                }
            }

            return(NotFound()); //Return 404 if no auction details found
        }