Spaces:
Sleeping
Sleeping
| import asyncio | |
| import logging | |
| from fastapi import Depends, HTTPException | |
| from app.services.razorpay import RazorpayService | |
| from app.repositories.cart import save_to_cache, get_from_cache | |
| from app.repositories.payment import save_order_to_db | |
| logger = logging.getLogger(__name__) # Use module-level logger | |
| class OrderController: | |
| def __init__(self, razorpay_service: RazorpayService = Depends()): | |
| self.razorpay_service = razorpay_service | |
| async def create_order(self, customer_id: str, amount: float, currency: str): | |
| """ | |
| Creates a new Razorpay order, stores it in PostgreSQL, and caches it. | |
| Args: | |
| customer_id (str): Unique customer ID. | |
| amount (float): Total amount for payment. | |
| Returns: | |
| dict: Razorpay order response. | |
| """ | |
| try: | |
| # ✅ Create new Razorpay order if not found in cache | |
| order = await asyncio.to_thread( | |
| self.razorpay_service.create_order, | |
| currency=currency, | |
| amount=amount, # Convert INR to paisa | |
| receipt=customer_id | |
| ) | |
| if not order or "id" not in order: | |
| raise HTTPException(status_code=500, detail="Failed to create Razorpay order") | |
| # ✅ Store order in PostgreSQL | |
| await save_order_to_db( | |
| order_id=order["id"], | |
| customer_id=customer_id, | |
| amount=order["amount"]/100, | |
| currency=order["currency"], | |
| status="pending" | |
| ) | |
| return order | |
| except Exception as e: | |
| logger.error(f"❌ Error creating Razorpay order: {e}") | |
| raise HTTPException(status_code=500, detail="Failed to create Razorpay order") |