Update main.py
Browse files
main.py
CHANGED
|
@@ -235,6 +235,40 @@ def request_credits():
|
|
| 235 |
logging.error(f"Request credits error: {e}")
|
| 236 |
return jsonify({'error': str(e)}), 500
|
| 237 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 238 |
# ---------- Admin Endpoints for Credit Requests ----------
|
| 239 |
|
| 240 |
@app.route('/api/admin/profile', methods=['GET'])
|
|
@@ -400,31 +434,7 @@ def admin_suspend_user(uid):
|
|
| 400 |
logging.error(f"Admin suspend user error: {e}")
|
| 401 |
return jsonify({'error': str(e)}), 500
|
| 402 |
|
| 403 |
-
@app.route('/api/admin/stories', methods=['GET'])
|
| 404 |
-
def admin_list_stories():
|
| 405 |
-
try:
|
| 406 |
-
verify_admin(request.headers.get('Authorization', ''))
|
| 407 |
-
stories_ref = db.reference('stories')
|
| 408 |
-
all_stories = stories_ref.get() or {}
|
| 409 |
-
total_stories = len(all_stories)
|
| 410 |
-
|
| 411 |
-
users_ref = db.reference('users')
|
| 412 |
-
users_data = users_ref.get() or {}
|
| 413 |
-
|
| 414 |
-
stories_per_user = {}
|
| 415 |
-
for sid, sdata in all_stories.items():
|
| 416 |
-
user_id = sdata.get('uid')
|
| 417 |
-
if user_id:
|
| 418 |
-
user_email = users_data.get(user_id, {}).get('email', 'Unknown')
|
| 419 |
-
stories_per_user[user_email] = stories_per_user.get(user_email, 0) + 1
|
| 420 |
|
| 421 |
-
return jsonify({
|
| 422 |
-
'total_stories': total_stories,
|
| 423 |
-
'stories_per_user': stories_per_user
|
| 424 |
-
}), 200
|
| 425 |
-
except Exception as e:
|
| 426 |
-
logging.error(f"Admin list stories error: {e}")
|
| 427 |
-
return jsonify({'error': str(e)}), 500
|
| 428 |
|
| 429 |
@app.route('/api/admin/notifications', methods=['POST'])
|
| 430 |
def send_notifications():
|
|
|
|
| 235 |
logging.error(f"Request credits error: {e}")
|
| 236 |
return jsonify({'error': str(e)}), 500
|
| 237 |
|
| 238 |
+
# Add this new endpoint to your Flask app
|
| 239 |
+
@app.route('/api/user/submit_feedback', methods=['POST'])
|
| 240 |
+
@credit_required(cost=0) # Requires authentication but no credit cost
|
| 241 |
+
@cross_origin()
|
| 242 |
+
def submit_feedback():
|
| 243 |
+
try:
|
| 244 |
+
auth_header = request.headers.get('Authorization', '')
|
| 245 |
+
token = auth_header.split(' ')[1]
|
| 246 |
+
uid = verify_token(token) # UID already verified by decorator
|
| 247 |
+
|
| 248 |
+
data = request.get_json()
|
| 249 |
+
feedback_type = data.get('type') # e.g., 'bug', 'feature_request', 'general'
|
| 250 |
+
message = data.get('message')
|
| 251 |
+
|
| 252 |
+
if not feedback_type or not message:
|
| 253 |
+
return jsonify({'error': 'Feedback type and message are required'}), 400
|
| 254 |
+
|
| 255 |
+
user_data = db.reference(f'users/{uid}').get()
|
| 256 |
+
user_email = user_data.get('email', 'unknown_email') # Get email for admin view
|
| 257 |
+
|
| 258 |
+
feedback_ref = db.reference('feedback').push()
|
| 259 |
+
feedback_ref.set({
|
| 260 |
+
'user_id': uid,
|
| 261 |
+
'user_email': user_email, # Store user email for easier admin lookup
|
| 262 |
+
'type': feedback_type,
|
| 263 |
+
'message': message,
|
| 264 |
+
'created_at': datetime.utcnow().isoformat(),
|
| 265 |
+
'status': 'open' # Initial status for new feedback
|
| 266 |
+
})
|
| 267 |
+
return jsonify({'success': True, 'feedback_id': feedback_ref.key}), 201
|
| 268 |
+
except Exception as e:
|
| 269 |
+
logging.error(f"Submit feedback error: {e}")
|
| 270 |
+
return jsonify({'error': str(e)}), 500
|
| 271 |
+
|
| 272 |
# ---------- Admin Endpoints for Credit Requests ----------
|
| 273 |
|
| 274 |
@app.route('/api/admin/profile', methods=['GET'])
|
|
|
|
| 434 |
logging.error(f"Admin suspend user error: {e}")
|
| 435 |
return jsonify({'error': str(e)}), 500
|
| 436 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 437 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 438 |
|
| 439 |
@app.route('/api/admin/notifications', methods=['POST'])
|
| 440 |
def send_notifications():
|