feat: Semaine 8

This commit is contained in:
gauvainboiche
2026-05-11 09:25:19 +02:00
parent 606e43e53f
commit 3315cb2336
123 changed files with 5748 additions and 0 deletions
@@ -0,0 +1,40 @@
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"]}
)
@@ -0,0 +1,26 @@
import json
from kafka import KafkaProducer
from shared.events import BOOTSTRAP_SERVERS, make_event, TOPIC_ORDERS
class OrderProducer:
def __init__(self):
self.producer = KafkaProducer(
bootstrap_servers=BOOTSTRAP_SERVERS,
key_serializer= str.encode, # convertir en bytes "3" -> b"3"
value_serializer=lambda v: json.dumps(v).encode(),
acks= "all"
)
def publish_order_created(self, order: dict):
event = make_event(
"order_created",
order
)
self.producer.send(
TOPIC_ORDERS,
value=event
)
self.producer.flush()