| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- from flask import jsonify, request
- from flask_login import login_required, current_user
- from app import db
- from app.models import User, Restaurant
- from . import admin
- @admin.before_request
- @login_required
- def admin_required():
- if not current_user.is_admin:
- return jsonify({'error': 'Admin access required'}), 403
- @admin.route('/users', methods=['GET'])
- def get_users():
- users = User.query.all()
- return jsonify([{
- 'id': u.id,
- 'username': u.username,
- 'email': u.email,
- 'is_admin': u.is_admin,
- 'is_probation': u.is_probation
- } for u in users])
- @admin.route('/users/<int:id>/probation', methods=['POST'])
- def toggle_probation(id):
- user = User.query.get_or_404(id)
- data = request.get_json()
- user.is_probation = data.get('is_probation', True)
- db.session.commit()
- return jsonify({'message': 'User probation status updated'})
- @admin.route('/restaurants/pending', methods=['GET'])
- def get_pending_restaurants():
- restaurants = Restaurant.query.filter_by(status='pending').all()
- return jsonify([{
- 'id': r.id,
- 'name': r.name,
- 'author': r.author.username,
- 'created_at': r.created_at
- } for r in restaurants])
- @admin.route('/restaurants/<int:id>/approve', methods=['POST'])
- def approve_restaurant(id):
- restaurant = Restaurant.query.get_or_404(id)
- restaurant.status = 'approved'
-
- # Check if user has 3 approved listings to remove probation
- user = restaurant.author
- approved_count = Restaurant.query.filter_by(user_id=user.id, status='approved').count()
- if approved_count >= 3:
- user.is_probation = False
-
- db.session.commit()
- return jsonify({'message': 'Restaurant approved'})
- @admin.route('/restaurants/<int:id>/reject', methods=['POST'])
- def reject_restaurant(id):
- restaurant = Restaurant.query.get_or_404(id)
- restaurant.status = 'rejected'
- db.session.commit()
- return jsonify({'message': 'Restaurant rejected'})
|