routes.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. from flask import jsonify, request
  2. from flask_login import login_required, current_user
  3. from app import db
  4. from app.models import User, Restaurant
  5. from . import admin
  6. @admin.before_request
  7. @login_required
  8. def admin_required():
  9. if not current_user.is_admin:
  10. return jsonify({'error': 'Admin access required'}), 403
  11. @admin.route('/users', methods=['GET'])
  12. def get_users():
  13. users = User.query.all()
  14. return jsonify([{
  15. 'id': u.id,
  16. 'username': u.username,
  17. 'email': u.email,
  18. 'is_admin': u.is_admin,
  19. 'is_probation': u.is_probation
  20. } for u in users])
  21. @admin.route('/users/<int:id>/probation', methods=['POST'])
  22. def toggle_probation(id):
  23. user = User.query.get_or_404(id)
  24. data = request.get_json()
  25. user.is_probation = data.get('is_probation', True)
  26. db.session.commit()
  27. return jsonify({'message': 'User probation status updated'})
  28. @admin.route('/restaurants/pending', methods=['GET'])
  29. def get_pending_restaurants():
  30. restaurants = Restaurant.query.filter_by(status='pending').all()
  31. return jsonify([{
  32. 'id': r.id,
  33. 'name': r.name,
  34. 'author': r.author.username,
  35. 'created_at': r.created_at
  36. } for r in restaurants])
  37. @admin.route('/restaurants/<int:id>/approve', methods=['POST'])
  38. def approve_restaurant(id):
  39. restaurant = Restaurant.query.get_or_404(id)
  40. restaurant.status = 'approved'
  41. # Check if user has 3 approved listings to remove probation
  42. user = restaurant.author
  43. approved_count = Restaurant.query.filter_by(user_id=user.id, status='approved').count()
  44. if approved_count >= 3:
  45. user.is_probation = False
  46. db.session.commit()
  47. return jsonify({'message': 'Restaurant approved'})
  48. @admin.route('/restaurants/<int:id>/reject', methods=['POST'])
  49. def reject_restaurant(id):
  50. restaurant = Restaurant.query.get_or_404(id)
  51. restaurant.status = 'rejected'
  52. db.session.commit()
  53. return jsonify({'message': 'Restaurant rejected'})