feat: Add customer management endpoints (edit, delete, suspend, activate)

This commit is contained in:
oguz ozturk 2026-01-12 17:59:06 +03:00
parent c62a1afd6f
commit a4ee014397
1 changed files with 228 additions and 0 deletions

View File

@ -539,6 +539,234 @@ def update_customer_plan(customer_id):
}), 500 }), 500
@admin_bp.route('/customers/<int:customer_id>', methods=['PUT'])
def update_customer(customer_id):
"""Müşteri bilgilerini güncelle"""
try:
data = request.json
customer = Customer.query.get(customer_id)
if not customer:
return jsonify({
"status": "error",
"message": "Müşteri bulunamadı"
}), 404
user = User.query.get(customer.user_id)
# Update user fields
if 'full_name' in data:
user.full_name = data['full_name']
if 'email' in data:
# Check if email already exists
existing = User.query.filter(User.email == data['email'], User.id != user.id).first()
if existing:
return jsonify({
"status": "error",
"message": "Bu email adresi zaten kullanılıyor"
}), 400
user.email = data['email']
# Update customer fields
if 'company_name' in data:
customer.company_name = data['company_name']
if 'phone' in data:
customer.phone = data['phone']
if 'billing_address' in data:
customer.billing_address = data['billing_address']
if 'billing_city' in data:
customer.billing_city = data['billing_city']
if 'billing_country' in data:
customer.billing_country = data['billing_country']
if 'billing_postal_code' in data:
customer.billing_postal_code = data['billing_postal_code']
db.session.commit()
return jsonify({
"status": "success",
"message": "Müşteri bilgileri başarıyla güncellendi",
"customer": {
**user.to_dict(),
**customer.to_dict()
}
})
except Exception as e:
db.session.rollback()
return jsonify({
"status": "error",
"message": f"Müşteri güncellenirken hata: {str(e)}"
}), 500
@admin_bp.route('/customers/<int:customer_id>', methods=['DELETE'])
def delete_customer(customer_id):
"""Müşteriyi sil (tüm domainleri ile birlikte)"""
try:
customer = Customer.query.get(customer_id)
if not customer:
return jsonify({
"status": "error",
"message": "Müşteri bulunamadı"
}), 404
user = User.query.get(customer.user_id)
# Get all domains
domains = Domain.query.filter_by(customer_id=customer.id).all()
domain_count = len(domains)
# Delete all domains and their DNS records
from app.models.domain import DNSRecord
for domain in domains:
# Delete DNS records
DNSRecord.query.filter_by(domain_id=domain.id).delete()
# Delete domain
db.session.delete(domain)
# Delete customer
db.session.delete(customer)
# Delete user
db.session.delete(user)
db.session.commit()
return jsonify({
"status": "success",
"message": f"Müşteri ve {domain_count} domain başarıyla silindi"
})
except Exception as e:
db.session.rollback()
return jsonify({
"status": "error",
"message": f"Müşteri silinirken hata: {str(e)}"
}), 500
@admin_bp.route('/customers/<int:customer_id>/suspend', methods=['POST'])
def suspend_customer(customer_id):
"""Müşteriyi askıya al (suspend)"""
try:
customer = Customer.query.get(customer_id)
if not customer:
return jsonify({
"status": "error",
"message": "Müşteri bulunamadı"
}), 404
user = User.query.get(customer.user_id)
# Suspend user and subscription
user.is_active = False
customer.subscription_status = 'suspended'
# Optionally suspend all domains
Domain.query.filter_by(customer_id=customer.id).update({
'status': 'suspended'
})
db.session.commit()
return jsonify({
"status": "success",
"message": "Müşteri başarıyla askıya alındı"
})
except Exception as e:
db.session.rollback()
return jsonify({
"status": "error",
"message": f"Müşteri askıya alınırken hata: {str(e)}"
}), 500
@admin_bp.route('/customers/<int:customer_id>/activate', methods=['POST'])
def activate_customer(customer_id):
"""Müşteriyi aktif et"""
try:
customer = Customer.query.get(customer_id)
if not customer:
return jsonify({
"status": "error",
"message": "Müşteri bulunamadı"
}), 404
user = User.query.get(customer.user_id)
# Activate user and subscription
user.is_active = True
customer.subscription_status = 'active'
# Optionally activate all domains
Domain.query.filter_by(customer_id=customer.id, status='suspended').update({
'status': 'active'
})
db.session.commit()
return jsonify({
"status": "success",
"message": "Müşteri başarıyla aktif edildi"
})
except Exception as e:
db.session.rollback()
return jsonify({
"status": "error",
"message": f"Müşteri aktif edilirken hata: {str(e)}"
}), 500
@admin_bp.route('/customers/<int:customer_id>/plan', methods=['PUT'])
def update_customer_plan(customer_id):
"""Müşteri paketini güncelle"""
try:
data = request.json
customer = Customer.query.get(customer_id)
if not customer:
return jsonify({
"status": "error",
"message": "Müşteri bulunamadı"
}), 404
# Update subscription plan
if 'subscription_plan' in data:
customer.subscription_plan = data['subscription_plan']
# Update limits
if 'max_domains' in data:
customer.max_domains = data['max_domains']
if 'max_containers' in data:
customer.max_containers = data['max_containers']
# Update subscription dates
if 'subscription_expires' in data:
from datetime import datetime
customer.subscription_expires = datetime.fromisoformat(data['subscription_expires'])
db.session.commit()
return jsonify({
"status": "success",
"message": "Paket başarıyla güncellendi",
"customer": customer.to_dict()
})
except Exception as e:
db.session.rollback()
return jsonify({
"status": "error",
"message": f"Paket güncellenirken hata: {str(e)}"
}), 500
@admin_bp.route('/customers/<int:customer_id>/status', methods=['PUT']) @admin_bp.route('/customers/<int:customer_id>/status', methods=['PUT'])
def update_customer_status(customer_id): def update_customer_status(customer_id):
"""Müşteri durumunu güncelle (aktif/pasif)""" """Müşteri durumunu güncelle (aktif/pasif)"""