Exemplo n.º 1
0
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
Exemplo n.º 2
0
 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
Exemplo n.º 3
0
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
Exemplo n.º 4
0
 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