aboutsummaryrefslogtreecommitdiff
path: root/order-service/app/api/v1
diff options
context:
space:
mode:
Diffstat (limited to 'order-service/app/api/v1')
-rw-r--r--order-service/app/api/v1/api.py5
-rw-r--r--order-service/app/api/v1/endpoints/orders.py48
2 files changed, 53 insertions, 0 deletions
diff --git a/order-service/app/api/v1/api.py b/order-service/app/api/v1/api.py
new file mode 100644
index 0000000..a967cb4
--- /dev/null
+++ b/order-service/app/api/v1/api.py
@@ -0,0 +1,5 @@
+from fastapi import APIRouter
+from app.api.v1.endpoints import orders
+
+api_router = APIRouter()
+api_router.include_router(orders.router, prefix="/orders", tags=["orders"])
diff --git a/order-service/app/api/v1/endpoints/orders.py b/order-service/app/api/v1/endpoints/orders.py
new file mode 100644
index 0000000..4530958
--- /dev/null
+++ b/order-service/app/api/v1/endpoints/orders.py
@@ -0,0 +1,48 @@
+from decimal import Decimal
+from fastapi import APIRouter, Depends, HTTPException, status
+from sqlalchemy.orm import Session
+
+from app.api import deps
+from app.models.order import Order, OrderItem
+from app.schemas.order import OrderCreate, OrderOut
+
+router = APIRouter()
+
+
[email protected]("/", response_model=OrderOut, status_code=status.HTTP_202_ACCEPTED)
+def create_order(order_in: OrderCreate, db: Session = Depends(deps.get_db)):
+ """
+ Submit a new customer order.
+ Returns status code 202 (Accepted) as the order is pending verification.
+ """
+ try:
+ total = Decimal("0.00")
+ for item in order_in.items:
+ total += item.price * item.quantity
+
+ db_order = Order(
+ customer_id=order_in.customer_id, status="PENDING", total_price=total
+ )
+ db.add(db_order)
+ db.flush()
+
+ for item in order_in.items:
+ db_item = OrderItem(
+ order_id=db_order.id,
+ product_id=item.product_id,
+ quantity=item.quantity,
+ price=item.price,
+ )
+ db.add(db_item)
+
+ db.commit()
+ db.refresh(db_order)
+
+ return db_order
+
+ except Exception:
+ db.rollback()
+ raise HTTPException(
+ status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
+ detail="Could not initialize checkout process.",
+ )