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//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//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//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'})