MukeshKapoor25's picture
feat: add authentication, security middleware, and optimize JSON handling
fd2ce9d
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")