98 lines
3.0 KiB
Python
98 lines
3.0 KiB
Python
from fastapi import APIRouter, Depends, status
|
|
from sqlalchemy.orm import Session
|
|
import os
|
|
|
|
from app.db import get_db
|
|
from app.dependencies import get_current_user
|
|
from app.models.user_model import User
|
|
from app.schemas.order_schema import CreateOrderRequest
|
|
from app.schemas.response_schema import ApiResponse
|
|
from app.services.order_service import get_order_service
|
|
from app.core.logging_config import get_api_logger
|
|
from app.core.response_utils import success, error
|
|
|
|
# Get API logger
|
|
api_logger = get_api_logger()
|
|
|
|
router = APIRouter(
|
|
prefix="/order",
|
|
tags=["Order"],
|
|
)
|
|
|
|
|
|
@router.post("", response_model=ApiResponse)
|
|
async def create_order(
|
|
order_data: CreateOrderRequest,
|
|
db: Session = Depends(get_db),
|
|
current_user: User = Depends(get_current_user)
|
|
):
|
|
|
|
try:
|
|
api_logger.info(f"User {current_user.id} creating order for product {order_data.product_id}")
|
|
|
|
# Get external API configuration from environment
|
|
external_api_url = os.getenv("EXTERNAL_ORDER_API_URL")
|
|
api_key = os.getenv("EXTERNAL_ORDER_API_KEY")
|
|
|
|
# Get order service instance
|
|
order_service = get_order_service(
|
|
external_api_url=external_api_url,
|
|
api_key=api_key
|
|
)
|
|
|
|
# Forward request to external API
|
|
result = await order_service.create_order(
|
|
order_data=order_data,
|
|
user_id=str(current_user.id)
|
|
)
|
|
|
|
api_logger.info(f"Order created successfully: {result.get('order_id')}")
|
|
|
|
return success(data=result, msg="Order created successfully")
|
|
|
|
except Exception as e:
|
|
api_logger.error(f"Failed to create order: {str(e)}", exc_info=True)
|
|
return error(msg=str(e), code=status.HTTP_500_INTERNAL_SERVER_ERROR)
|
|
|
|
|
|
@router.get("/{order_id}", response_model=ApiResponse)
|
|
async def get_order(
|
|
order_id: str,
|
|
db: Session = Depends(get_db),
|
|
current_user: User = Depends(get_current_user)
|
|
):
|
|
"""Get order details from external API
|
|
|
|
Args:
|
|
order_id: Order ID
|
|
db: Database session
|
|
current_user: Current authenticated user
|
|
|
|
Returns:
|
|
API response with order details
|
|
"""
|
|
try:
|
|
api_logger.info(f"User {current_user.id} fetching order {order_id}")
|
|
|
|
# Get external API configuration
|
|
external_api_url = os.getenv("EXTERNAL_ORDER_API_URL")
|
|
api_key = os.getenv("EXTERNAL_ORDER_API_KEY")
|
|
|
|
# Get order service instance
|
|
order_service = get_order_service(
|
|
external_api_url=external_api_url,
|
|
api_key=api_key
|
|
)
|
|
|
|
# Fetch order from external API
|
|
result = await order_service.get_order(order_id)
|
|
|
|
api_logger.info(f"Order {order_id} fetched successfully")
|
|
|
|
return success(data=result, msg="Order fetched successfully")
|
|
|
|
except Exception as e:
|
|
api_logger.error(f"Failed to fetch order {order_id}: {str(e)}", exc_info=True)
|
|
return error(msg=str(e), code=status.HTTP_500_INTERNAL_SERVER_ERROR)
|
|
|