rairo commited on
Commit
482037a
·
verified ·
1 Parent(s): d7a9dae

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +46 -0
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')