Automated Action 246b4e058e Implement comprehensive FastAPI backend for landing page
Added complete backend infrastructure with:
- Authentication system with OAuth (Google, GitHub, Apple)
- Stripe payment processing with subscription management
- Testimonials management API
- Usage statistics tracking
- Email communication services
- Health monitoring endpoints
- Database migrations with Alembic
- Comprehensive API documentation

All APIs are production-ready with proper error handling,
security measures, and environment variable configuration.

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-01 23:39:39 +00:00

90 lines
3.3 KiB
Python

import stripe
from typing import Dict, Any
from app.core.config import settings
stripe.api_key = settings.stripe_secret_key
class StripeService:
def __init__(self):
self.stripe = stripe
async def create_customer(self, email: str, name: str = None) -> Dict[str, Any]:
try:
customer = self.stripe.Customer.create(
email=email,
name=name
)
return {"success": True, "customer": customer}
except stripe.error.StripeError as e:
return {"success": False, "error": str(e)}
async def create_checkout_session(self, price_id: str, customer_id: str, success_url: str, cancel_url: str) -> Dict[str, Any]:
try:
session = self.stripe.checkout.Session.create(
customer=customer_id,
payment_method_types=['card'],
line_items=[{
'price': price_id,
'quantity': 1,
}],
mode='subscription',
success_url=success_url,
cancel_url=cancel_url,
)
return {"success": True, "session": session}
except stripe.error.StripeError as e:
return {"success": False, "error": str(e)}
async def get_subscription(self, subscription_id: str) -> Dict[str, Any]:
try:
subscription = self.stripe.Subscription.retrieve(subscription_id)
return {"success": True, "subscription": subscription}
except stripe.error.StripeError as e:
return {"success": False, "error": str(e)}
async def cancel_subscription(self, subscription_id: str) -> Dict[str, Any]:
try:
subscription = self.stripe.Subscription.delete(subscription_id)
return {"success": True, "subscription": subscription}
except stripe.error.StripeError as e:
return {"success": False, "error": str(e)}
async def create_product_and_prices(self):
products = [
{
"name": "Starter Plan",
"prices": [{"amount": 999, "interval": "month"}]
},
{
"name": "Professional Plan",
"prices": [{"amount": 2999, "interval": "month"}]
},
{
"name": "Business Plan",
"prices": [{"amount": 9999, "interval": "month"}]
},
{
"name": "Enterprise Plan",
"prices": [{"amount": 29999, "interval": "month"}]
}
]
created_products = []
for product_data in products:
try:
product = self.stripe.Product.create(name=product_data["name"])
for price_data in product_data["prices"]:
price = self.stripe.Price.create(
product=product.id,
unit_amount=price_data["amount"],
currency='usd',
recurring={'interval': price_data["interval"]}
)
created_products.append({
"product": product,
"price": price
})
except stripe.error.StripeError as e:
print(f"Error creating product: {e}")
return created_products