Spaces:
Sleeping
Sleeping
Update main.py
Browse files
main.py
CHANGED
|
@@ -790,6 +790,116 @@ def admin_update_credits(uid):
|
|
| 790 |
return jsonify({'success': True, 'new_total_credits': new_total})
|
| 791 |
except Exception as e: return jsonify({'error': str(e)}), 500
|
| 792 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 793 |
# -----------------------------------------------------------------------------
|
| 794 |
# 7. MAIN EXECUTION
|
| 795 |
# -----------------------------------------------------------------------------
|
|
|
|
| 790 |
return jsonify({'success': True, 'new_total_credits': new_total})
|
| 791 |
except Exception as e: return jsonify({'error': str(e)}), 500
|
| 792 |
|
| 793 |
+
@app.route('/api/admin/feedback', methods=['GET'])
|
| 794 |
+
def list_feedback():
|
| 795 |
+
"""List all feedback submissions for admin review."""
|
| 796 |
+
try:
|
| 797 |
+
verify_admin(request.headers.get('Authorization', ''))
|
| 798 |
+
|
| 799 |
+
# Get all feedback from Firebase
|
| 800 |
+
all_feedback = db.reference('feedback').get() or {}
|
| 801 |
+
|
| 802 |
+
# Convert to list format with feedback IDs
|
| 803 |
+
feedback_list = []
|
| 804 |
+
for feedback_id, feedback_data in all_feedback.items():
|
| 805 |
+
feedback_item = {
|
| 806 |
+
'id': feedback_id,
|
| 807 |
+
**feedback_data
|
| 808 |
+
}
|
| 809 |
+
feedback_list.append(feedback_item)
|
| 810 |
+
|
| 811 |
+
# Sort by created_at (most recent first) if timestamp exists
|
| 812 |
+
feedback_list.sort(key=lambda x: x.get('created_at', ''), reverse=True)
|
| 813 |
+
|
| 814 |
+
return jsonify({'feedback': feedback_list}), 200
|
| 815 |
+
|
| 816 |
+
except Exception as e:
|
| 817 |
+
traceback.print_exc()
|
| 818 |
+
return jsonify({'error': str(e)}), 500
|
| 819 |
+
|
| 820 |
+
|
| 821 |
+
@app.route('/api/admin/feedback/<string:feedback_id>', methods=['PUT'])
|
| 822 |
+
def update_feedback_status(feedback_id):
|
| 823 |
+
"""Update feedback status (e.g., mark as reviewed, resolved, etc.)"""
|
| 824 |
+
try:
|
| 825 |
+
admin_uid = verify_admin(request.headers.get('Authorization', ''))
|
| 826 |
+
|
| 827 |
+
# Check if feedback exists
|
| 828 |
+
feedback_ref = db.reference(f'feedback/{feedback_id}')
|
| 829 |
+
feedback_data = feedback_ref.get()
|
| 830 |
+
|
| 831 |
+
if not feedback_data:
|
| 832 |
+
return jsonify({'error': 'Feedback not found'}), 404
|
| 833 |
+
|
| 834 |
+
# Get the new status from request
|
| 835 |
+
request_data = request.get_json()
|
| 836 |
+
new_status = request_data.get('status')
|
| 837 |
+
|
| 838 |
+
# Validate status
|
| 839 |
+
valid_statuses = ['open', 'reviewed', 'resolved', 'closed']
|
| 840 |
+
if new_status not in valid_statuses:
|
| 841 |
+
return jsonify({'error': f'Status must be one of: {", ".join(valid_statuses)}'}), 400
|
| 842 |
+
|
| 843 |
+
# Update feedback with new status and admin info
|
| 844 |
+
update_data = {
|
| 845 |
+
'status': new_status,
|
| 846 |
+
'processed_by': admin_uid,
|
| 847 |
+
'processed_at': datetime.utcnow().isoformat()
|
| 848 |
+
}
|
| 849 |
+
|
| 850 |
+
# Add admin notes if provided
|
| 851 |
+
admin_notes = request_data.get('admin_notes')
|
| 852 |
+
if admin_notes:
|
| 853 |
+
update_data['admin_notes'] = admin_notes
|
| 854 |
+
|
| 855 |
+
feedback_ref.update(update_data)
|
| 856 |
+
|
| 857 |
+
return jsonify({
|
| 858 |
+
'success': True,
|
| 859 |
+
'message': f'Feedback status updated to {new_status}',
|
| 860 |
+
'feedback_id': feedback_id
|
| 861 |
+
}), 200
|
| 862 |
+
|
| 863 |
+
except Exception as e:
|
| 864 |
+
traceback.print_exc()
|
| 865 |
+
return jsonify({'error': str(e)}), 500
|
| 866 |
+
|
| 867 |
+
|
| 868 |
+
@app.route('/api/admin/feedback/<string:feedback_id>', methods=['GET'])
|
| 869 |
+
def get_feedback_details(feedback_id):
|
| 870 |
+
"""Get detailed view of a specific feedback item."""
|
| 871 |
+
try:
|
| 872 |
+
verify_admin(request.headers.get('Authorization', ''))
|
| 873 |
+
|
| 874 |
+
# Get feedback details
|
| 875 |
+
feedback_ref = db.reference(f'feedback/{feedback_id}')
|
| 876 |
+
feedback_data = feedback_ref.get()
|
| 877 |
+
|
| 878 |
+
if not feedback_data:
|
| 879 |
+
return jsonify({'error': 'Feedback not found'}), 404
|
| 880 |
+
|
| 881 |
+
# Add the feedback ID to the response
|
| 882 |
+
feedback_details = {
|
| 883 |
+
'id': feedback_id,
|
| 884 |
+
**feedback_data
|
| 885 |
+
}
|
| 886 |
+
|
| 887 |
+
# Optionally get user details if user_id is present
|
| 888 |
+
if 'user_id' in feedback_data:
|
| 889 |
+
user_ref = db.reference(f'users/{feedback_data["user_id"]}')
|
| 890 |
+
user_data = user_ref.get()
|
| 891 |
+
if user_data:
|
| 892 |
+
feedback_details['user_details'] = {
|
| 893 |
+
'email': user_data.get('email'),
|
| 894 |
+
'name': user_data.get('name'),
|
| 895 |
+
'created_at': user_data.get('created_at')
|
| 896 |
+
}
|
| 897 |
+
|
| 898 |
+
return jsonify({'feedback': feedback_details}), 200
|
| 899 |
+
|
| 900 |
+
except Exception as e:
|
| 901 |
+
traceback.print_exc()
|
| 902 |
+
return jsonify({'error': str(e)}), 500
|
| 903 |
# -----------------------------------------------------------------------------
|
| 904 |
# 7. MAIN EXECUTION
|
| 905 |
# -----------------------------------------------------------------------------
|