admin-panel/backend/app/routes/customers.py

116 lines
3.5 KiB
Python

"""
Customer Management Routes (via Customer API)
"""
from flask import Blueprint, request, jsonify
from app.routes.auth import token_required
from app.config import Config
import requests
customers_bp = Blueprint('customers', __name__)
def call_customer_api(endpoint, method='GET', data=None):
"""Helper to call customer platform API"""
url = f"{Config.CUSTOMER_API_URL}{endpoint}"
headers = {
'Content-Type': 'application/json',
'X-Internal-Key': Config.CUSTOMER_API_INTERNAL_KEY
}
try:
if method == 'GET':
response = requests.get(url, headers=headers, timeout=10)
elif method == 'POST':
response = requests.post(url, headers=headers, json=data, timeout=10)
elif method == 'PUT':
response = requests.put(url, headers=headers, json=data, timeout=10)
elif method == 'DELETE':
response = requests.delete(url, headers=headers, timeout=10)
else:
return None
return response.json() if response.status_code < 500 else None
except Exception as e:
print(f"Error calling customer API: {e}")
return None
@customers_bp.route('', methods=['GET'])
@token_required
def get_customers(current_admin):
"""Get all customers from customer platform"""
try:
# TODO: Implement customer API endpoint
result = call_customer_api('/api/admin/customers')
if result:
return jsonify(result), 200
else:
return jsonify({
'status': 'success',
'customers': [],
'message': 'Customer API not yet implemented'
}), 200
except Exception as e:
return jsonify({'error': str(e)}), 500
@customers_bp.route('/<int:customer_id>', methods=['GET'])
@token_required
def get_customer(current_admin, customer_id):
"""Get single customer"""
try:
result = call_customer_api(f'/api/admin/customers/{customer_id}')
if result:
return jsonify(result), 200
else:
return jsonify({'error': 'Customer not found'}), 404
except Exception as e:
return jsonify({'error': str(e)}), 500
@customers_bp.route('/<int:customer_id>/plan', methods=['PUT'])
@token_required
def update_customer_plan(current_admin, customer_id):
"""Update customer's subscription plan"""
try:
data = request.get_json()
result = call_customer_api(
f'/api/admin/customers/{customer_id}/plan',
method='PUT',
data=data
)
if result:
return jsonify(result), 200
else:
return jsonify({'error': 'Failed to update plan'}), 500
except Exception as e:
return jsonify({'error': str(e)}), 500
@customers_bp.route('/stats', methods=['GET'])
@token_required
def get_customer_stats(current_admin):
"""Get customer statistics"""
try:
result = call_customer_api('/api/admin/stats')
if result:
return jsonify(result), 200
else:
# Return mock data for now
return jsonify({
'status': 'success',
'stats': {
'total_customers': 0,
'active_customers': 0,
'total_domains': 0,
'total_containers': 0
}
}), 200
except Exception as e:
return jsonify({'error': str(e)}), 500