40 lines
1.0 KiB
Python
40 lines
1.0 KiB
Python
import sys, os
|
|
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
|
|
|
from uuid import uuid4
|
|
from fastapi import FastAPI
|
|
|
|
from fastapi.responses import JSONResponse
|
|
from pydantic import BaseModel
|
|
from producer import OrderProducer
|
|
|
|
app = FastAPI()
|
|
producer = OrderProducer()
|
|
orders_db: list[dict] = []
|
|
|
|
class OrderItem(BaseModel):
|
|
dish_id: int
|
|
name: str
|
|
price: float
|
|
|
|
class CreateOrderDto(BaseModel):
|
|
customer_id: int
|
|
restaurant_id: int
|
|
items: list[OrderItem]
|
|
|
|
@app.post("/orders")
|
|
async def place_order(payload: CreateOrderDto):
|
|
order = {
|
|
"order_id": uuid4().hex,
|
|
"customer_id": payload.customer_id,
|
|
"restaurant_id": payload.restaurant_id,
|
|
"items": [ item.model_dump() for item in payload.items ],
|
|
"total_amount": sum([ item.price for item in payload.items ])
|
|
}
|
|
|
|
producer.publish_order_created(order)
|
|
|
|
return JSONResponse(
|
|
status_code= 202,
|
|
content= {"message": "Commande acceptee", "order_id": order["order_id"]}
|
|
) |