Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions app/orders/routes.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
from fastapi import APIRouter
from fastapi import APIRouter, Depends

from ..schemas import Order
from ..request_guards import require_json_body
from ..services import OrdersService

orders = APIRouter()


@orders.post("/orders", status_code=201)
@orders.post("/orders", status_code=201, dependencies=[Depends(require_json_body)])
async def create_order(order: Order) -> dict[str, int]:
new_order = await OrdersService.create_order(order)
return {"id": new_order["id"]}
5 changes: 3 additions & 2 deletions app/products/routes.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
from fastapi import APIRouter, Header, HTTPException
from fastapi import APIRouter, Depends, Header, HTTPException
from fastapi.responses import JSONResponse

from ..schemas import Product, ProductType
from ..request_guards import require_json_body
from ..services import ProductService

products = APIRouter()
Expand All @@ -22,7 +23,7 @@ async def find_available_products(
return JSONResponse(content=products)


@products.post("/products", status_code=201)
@products.post("/products", status_code=201, dependencies=[Depends(require_json_body)])
async def add_product(data: Product) -> dict[str, int]:
product = await ProductService.create_product(data)
return {"id": product["id"]}
10 changes: 10 additions & 0 deletions app/request_guards.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from fastapi import HTTPException, Request


async def require_json_body(request: Request) -> None:
content_type = (request.headers.get("content-type") or "").split(";")[0].strip().lower()
if content_type != "application/json":
raise HTTPException(status_code=415, detail="Request body is required")

if not await request.body():
raise HTTPException(status_code=415, detail="Request body is required")
4 changes: 2 additions & 2 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
fastapi>=0.110
pytest>=7.4
python-dotenv>=1.0
specmatic==2.39.6.post1
specmatic==2.48.0
redis==7.0.1
testcontainers==4.13.2
coverage==7.11.0
coverage==7.11.0
1 change: 1 addition & 0 deletions specmatic.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ components:
specmaticOrderContracts:
git:
url: https://github.com/specmatic/specmatic-order-contracts.git
branch: missing-response-codes
services:
productSearchBffService:
description: Product Search BFF Service
Expand Down