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()); }
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 }