|
1 | | -from fastapi import APIRouter |
| 1 | +from fastapi import APIRouter, Body, HTTPException |
| 2 | +from pydantic import BaseModel, HttpUrl, field_validator |
2 | 3 | from services.edcpy_service import run_edcpy_negotiation_and_transfer |
3 | 4 |
|
4 | 5 | router = APIRouter() |
5 | 6 |
|
| 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 | + |
6 | 22 | @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