def create_trade(): try: selling_item_id = request.form['item_id'] except: return {'error': 'missing required params'}, 400 response, response_code = get_item(selling_item_id) if response_code != 200: return response, response_code item = Item.from_dict(response) if (item.owner_uid == g.uid): return {'error': 'cannot request trade with your own item'}, 400 # TODO: add check to make sure user hasn't already requested trade with this item. db = firestore.client() try: new_trade_ref = db.collection(TRADES_COLLECTION).document() except: return {'error': 'could not create new trade, try again later'}, 500 new_trade = Trade(new_trade_ref.id, g.uid, item.owner_uid, selling_item_id) try: new_trade_ref.set(new_trade.to_dict()) except: return {'error': 'could not push new trade, try again later'}, 500 return new_trade.to_dict(), 201
def render_for_seller(self, rendered_trade): result = super().render_for_seller(rendered_trade) if not result: return False # if super method failed response, response_code = get_item(self.buyer_item) if (response_code != 200): return False rendered_trade['their_item'] = response return True
def make_barter_and_money_trade(trade_id): # param validation try: buying_item_id = request.form['buyer_item'] buyer_price = request.form['buyer_price'] except: return {'error': 'missing required params'}, 400 # make sure trade exists response, response_code = get_trade(trade_id) if response_code != 200: return response, response_code trade_dict = response # ensure provided item ID exsists response, response_code = get_item(buying_item_id) if response_code != 200: return response, response_code item_dict = response # ensure trade buyer owns given item if (item_dict['owner_uid'] != trade_dict['buyer_id']): return {'error': "this trade's buyer doesn't own the given item"}, 400 trade_obj = Trade.from_dict(trade_dict) # ensure trade's status allows it to be updated like this if (trade_obj.compute_status(g.uid) != 1): return { 'error': "this trade's status is not 1 and hence cannot be updated with this method." }, 400 trade_dict['buyer_item'] = buying_item_id trade_dict['buyer_price'] = buyer_price new_trade_obj = BarterAndMoneyTrade.from_dict(trade_dict) db = firestore.client() try: new_trade_ref = db.collection(TRADES_COLLECTION).document(trade_id) new_trade_ref.update(new_trade_obj.to_dict()) except: return {'error': 'could not update trade, try again later'}, 500 return new_trade_obj.to_dict(), 200
def render_for_seller(self, rendered_trade): response, response_code = get_item(self.seller_item) if (response_code != 200): return False rendered_trade['your_item'] = response return True