Spaces:
Sleeping
Sleeping
Update main.py
Browse files
main.py
CHANGED
|
@@ -621,6 +621,52 @@ def respond_to_deal(deal_id):
|
|
| 621 |
except firebase_exceptions.FirebaseError as fe: logger.error(f"Firebase error in respond_to_deal: {fe}"); return jsonify({'error': f'Firebase error: {str(fe)}'}), 500
|
| 622 |
except Exception as e: logger.error(f"Respond to Deal Error: {e}"); return jsonify({'error': f'Failed to respond: {str(e)}'}), 500
|
| 623 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 624 |
@app.route('/api/admin/deals/pending', methods=['GET'])
|
| 625 |
def admin_get_pending_deals():
|
| 626 |
auth_header = request.headers.get('Authorization')
|
|
|
|
| 621 |
except firebase_exceptions.FirebaseError as fe: logger.error(f"Firebase error in respond_to_deal: {fe}"); return jsonify({'error': f'Firebase error: {str(fe)}'}), 500
|
| 622 |
except Exception as e: logger.error(f"Respond to Deal Error: {e}"); return jsonify({'error': f'Failed to respond: {str(e)}'}), 500
|
| 623 |
|
| 624 |
+
# --- NEW: /api/deals/my Endpoint ---
|
| 625 |
+
@app.route('/api/deals/my', methods=['GET'])
|
| 626 |
+
def get_my_deals():
|
| 627 |
+
auth_header = request.headers.get('Authorization')
|
| 628 |
+
uid = None # Initialize uid for error context
|
| 629 |
+
try:
|
| 630 |
+
# Ensure Firebase is initialized before proceeding
|
| 631 |
+
if not FIREBASE_INITIALIZED:
|
| 632 |
+
logger.error("get_my_deals: Firebase not initialized.")
|
| 633 |
+
return jsonify({'error': 'Server configuration error: Firebase not ready.'}), 503
|
| 634 |
+
|
| 635 |
+
uid = verify_token(auth_header) # This can raise exceptions handled below
|
| 636 |
+
# verify_token now returns None on auth failure or raises specific exceptions
|
| 637 |
+
# The handle_route_auth_errors will catch PermissionError or ValueError from verify_token
|
| 638 |
+
|
| 639 |
+
all_deals_ref = db.reference('deals', app=db_app)
|
| 640 |
+
all_deals = all_deals_ref.get() # This can return None if 'deals' node doesn't exist
|
| 641 |
+
|
| 642 |
+
my_deals = {}
|
| 643 |
+
if all_deals: # Important to check if all_deals is not None
|
| 644 |
+
for deal_id, deal_data in all_deals.items():
|
| 645 |
+
# Ensure deal_data is a dictionary before trying to access keys
|
| 646 |
+
if isinstance(deal_data, dict) and \
|
| 647 |
+
(deal_data.get('buyer_id') == uid or deal_data.get('farmer_id') == uid):
|
| 648 |
+
my_deals[deal_id] = deal_data
|
| 649 |
+
|
| 650 |
+
# You can optionally sort them here if needed by the frontend, e.g., by created_at
|
| 651 |
+
# sorted_my_deals_list = sorted(my_deals.items(), key=lambda item: item[1].get('created_at', ''), reverse=True)
|
| 652 |
+
# return jsonify(dict(sorted_my_deals_list)), 200
|
| 653 |
+
|
| 654 |
+
return jsonify(my_deals), 200
|
| 655 |
+
|
| 656 |
+
except Exception as e_auth_related: # Catches exceptions from verify_token or other auth logic
|
| 657 |
+
return handle_route_auth_errors(e_auth_related) # Use your existing handler
|
| 658 |
+
# The handle_route_auth_errors should ideally catch firebase_exceptions.FirebaseError too,
|
| 659 |
+
# or you can add a specific catch here if needed for DB operations within this route.
|
| 660 |
+
# For now, assuming handle_route_auth_errors is comprehensive enough or
|
| 661 |
+
# that FirebaseErrors from db.reference().get() would be caught by a generic Exception.
|
| 662 |
+
# To be more robust for DB specific errors within this route:
|
| 663 |
+
except firebase_exceptions.FirebaseError as fe:
|
| 664 |
+
logger.error(f"Firebase error in get_my_deals for UID {uid or 'unknown'}: {fe}\n{traceback.format_exc()}")
|
| 665 |
+
return jsonify({'error': f'Database operation failed: {str(fe)}', 'type': 'FirebaseSDKError'}), 500
|
| 666 |
+
except Exception as e: # Generic catch-all for any other unexpected error
|
| 667 |
+
logger.error(f"Get My Deals Error for UID {uid or 'unknown'}: {e}\n{traceback.format_exc()}")
|
| 668 |
+
return jsonify({'error': f'An unexpected error occurred: {str(e)}', 'type': 'GenericError'}), 500
|
| 669 |
+
|
| 670 |
@app.route('/api/admin/deals/pending', methods=['GET'])
|
| 671 |
def admin_get_pending_deals():
|
| 672 |
auth_header = request.headers.get('Authorization')
|