205 lines
6.6 KiB
Python
205 lines
6.6 KiB
Python
"""
|
|
Simple verification script for subscription system setup.
|
|
Checks that all files are created and properly structured.
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
def check_file_exists(file_path, description):
|
|
"""Check if a file exists and report status."""
|
|
if os.path.exists(file_path):
|
|
print(f"✅ {description}: {file_path}")
|
|
return True
|
|
else:
|
|
print(f"❌ {description}: {file_path} - NOT FOUND")
|
|
return False
|
|
|
|
def check_file_content(file_path, search_terms, description):
|
|
"""Check if file contains expected content."""
|
|
try:
|
|
with open(file_path, 'r', encoding='utf-8') as f:
|
|
content = f.read()
|
|
|
|
missing_terms = []
|
|
for term in search_terms:
|
|
if term not in content:
|
|
missing_terms.append(term)
|
|
|
|
if not missing_terms:
|
|
print(f"✅ {description}: All expected content found")
|
|
return True
|
|
else:
|
|
print(f"❌ {description}: Missing content - {missing_terms}")
|
|
return False
|
|
except Exception as e:
|
|
print(f"❌ {description}: Error reading file - {e}")
|
|
return False
|
|
|
|
def main():
|
|
"""Main verification function."""
|
|
|
|
print("🔍 ALwrity Subscription System Setup Verification")
|
|
print("=" * 60)
|
|
|
|
backend_dir = Path(__file__).parent
|
|
|
|
# Files to check
|
|
files_to_check = [
|
|
(backend_dir / "models" / "subscription_models.py", "Subscription Models"),
|
|
(backend_dir / "services" / "pricing_service.py", "Pricing Service"),
|
|
(backend_dir / "services" / "usage_tracking_service.py", "Usage Tracking Service"),
|
|
(backend_dir / "services" / "subscription_exception_handler.py", "Exception Handler"),
|
|
(backend_dir / "api" / "subscription_api.py", "Subscription API"),
|
|
(backend_dir / "scripts" / "create_subscription_tables.py", "Migration Script"),
|
|
(backend_dir / "test_subscription_system.py", "Test Script"),
|
|
(backend_dir / "SUBSCRIPTION_SYSTEM_README.md", "Documentation")
|
|
]
|
|
|
|
# Check file existence
|
|
print("\n📁 Checking File Existence:")
|
|
print("-" * 30)
|
|
files_exist = 0
|
|
for file_path, description in files_to_check:
|
|
if check_file_exists(file_path, description):
|
|
files_exist += 1
|
|
|
|
# Check content of key files
|
|
print("\n📝 Checking File Content:")
|
|
print("-" * 30)
|
|
|
|
content_checks = [
|
|
(
|
|
backend_dir / "models" / "subscription_models.py",
|
|
["SubscriptionPlan", "APIUsageLog", "UsageSummary", "APIProvider"],
|
|
"Subscription Models Content"
|
|
),
|
|
(
|
|
backend_dir / "services" / "pricing_service.py",
|
|
["calculate_api_cost", "check_usage_limits", "APIProvider.GEMINI"],
|
|
"Pricing Service Content"
|
|
),
|
|
(
|
|
backend_dir / "services" / "usage_tracking_service.py",
|
|
["track_api_usage", "get_user_usage_stats", "enforce_usage_limits"],
|
|
"Usage Tracking Content"
|
|
),
|
|
(
|
|
backend_dir / "api" / "subscription_api.py",
|
|
["get_user_usage", "get_subscription_plans", "get_dashboard_data"],
|
|
"API Endpoints Content"
|
|
)
|
|
]
|
|
|
|
content_valid = 0
|
|
for file_path, search_terms, description in content_checks:
|
|
if os.path.exists(file_path):
|
|
if check_file_content(file_path, search_terms, description):
|
|
content_valid += 1
|
|
else:
|
|
print(f"❌ {description}: File not found")
|
|
|
|
# Check middleware integration
|
|
print("\n🔧 Checking Middleware Integration:")
|
|
print("-" * 30)
|
|
|
|
middleware_file = backend_dir / "middleware" / "monitoring_middleware.py"
|
|
middleware_terms = [
|
|
"UsageTrackingService",
|
|
"detect_api_provider",
|
|
"track_api_usage",
|
|
"check_usage_limits_middleware"
|
|
]
|
|
|
|
middleware_ok = check_file_content(
|
|
middleware_file,
|
|
middleware_terms,
|
|
"Middleware Integration"
|
|
)
|
|
|
|
# Check app.py integration
|
|
print("\n🚀 Checking FastAPI Integration:")
|
|
print("-" * 30)
|
|
|
|
app_file = backend_dir / "app.py"
|
|
app_terms = [
|
|
"from api.subscription_api import router as subscription_router",
|
|
"app.include_router(subscription_router)"
|
|
]
|
|
|
|
app_ok = check_file_content(
|
|
app_file,
|
|
app_terms,
|
|
"FastAPI App Integration"
|
|
)
|
|
|
|
# Check database service integration
|
|
print("\n💾 Checking Database Integration:")
|
|
print("-" * 30)
|
|
|
|
db_file = backend_dir / "services" / "database.py"
|
|
db_terms = [
|
|
"from models.subscription_models import Base as SubscriptionBase",
|
|
"SubscriptionBase.metadata.create_all(bind=engine)"
|
|
]
|
|
|
|
db_ok = check_file_content(
|
|
db_file,
|
|
db_terms,
|
|
"Database Service Integration"
|
|
)
|
|
|
|
# Summary
|
|
print("\n" + "=" * 60)
|
|
print("📊 VERIFICATION SUMMARY")
|
|
print("=" * 60)
|
|
|
|
total_files = len(files_to_check)
|
|
total_content = len(content_checks)
|
|
|
|
print(f"Files Created: {files_exist}/{total_files}")
|
|
print(f"Content Valid: {content_valid}/{total_content}")
|
|
print(f"Middleware Integration: {'✅' if middleware_ok else '❌'}")
|
|
print(f"FastAPI Integration: {'✅' if app_ok else '❌'}")
|
|
print(f"Database Integration: {'✅' if db_ok else '❌'}")
|
|
|
|
# Overall status
|
|
all_checks = [
|
|
files_exist == total_files,
|
|
content_valid == total_content,
|
|
middleware_ok,
|
|
app_ok,
|
|
db_ok
|
|
]
|
|
|
|
if all(all_checks):
|
|
print("\n🎉 ALL CHECKS PASSED!")
|
|
print("✅ Subscription system setup is complete and ready to use.")
|
|
|
|
print("\n" + "=" * 60)
|
|
print("🚀 NEXT STEPS:")
|
|
print("=" * 60)
|
|
print("1. Install dependencies (if not already done):")
|
|
print(" pip install sqlalchemy loguru fastapi")
|
|
print("\n2. Run the migration script:")
|
|
print(" python scripts/create_subscription_tables.py")
|
|
print("\n3. Test the system:")
|
|
print(" python test_subscription_system.py")
|
|
print("\n4. Start the server:")
|
|
print(" python start_alwrity_backend.py")
|
|
print("\n5. Test API endpoints:")
|
|
print(" GET http://localhost:8000/api/subscription/plans")
|
|
print(" GET http://localhost:8000/api/subscription/pricing")
|
|
|
|
else:
|
|
print("\n❌ SOME CHECKS FAILED!")
|
|
print("Please review the errors above and fix any issues.")
|
|
return False
|
|
|
|
return True
|
|
|
|
if __name__ == "__main__":
|
|
success = main()
|
|
if not success:
|
|
sys.exit(1) |