Skip to content

Commit ba0246b

Browse files
committed
🦺 Added Pydantic request body model with validation and error handling
1 parent 59724c7 commit ba0246b

File tree

1 file changed

+30
-3
lines changed

1 file changed

+30
-3
lines changed

api/routes.py

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,35 @@
1-
from fastapi import APIRouter
1+
from fastapi import APIRouter, Body, HTTPException
2+
from pydantic import BaseModel, HttpUrl, field_validator
23
from services.edcpy_service import run_edcpy_negotiation_and_transfer
34

45
router = APIRouter()
56

7+
8+
class NegotiationRequest(BaseModel):
9+
asset_id: str
10+
provider_connector_protocol_url: HttpUrl
11+
provider_connector_id: str
12+
provider_host: str
13+
14+
@field_validator("asset_id", "provider_connector_id", "provider_host")
15+
@classmethod
16+
def validate_non_empty_string(cls, v: str) -> str:
17+
if not v or not v.strip():
18+
raise ValueError("Field cannot be empty")
19+
return v.strip()
20+
21+
622
@router.post("/connector/initiate")
7-
async def initiate_negotiation_and_transfer(asset_id: str, provider_connector_protocol_url: str, provider_connector_id: str, provider_host: str):
8-
return await run_edcpy_negotiation_and_transfer(asset_id, provider_connector_protocol_url, provider_connector_id, provider_host)
23+
async def initiate_negotiation_and_transfer(request: NegotiationRequest = Body(...)):
24+
try:
25+
return await run_edcpy_negotiation_and_transfer(
26+
request.asset_id,
27+
str(request.provider_connector_protocol_url),
28+
request.provider_connector_id,
29+
request.provider_host
30+
)
31+
except Exception as e:
32+
raise HTTPException(
33+
status_code=500,
34+
detail=f"Negotiation and transfer failed: {str(e)}"
35+
)

0 commit comments

Comments
 (0)