API endpoints and internal response builders currently return untyped dict responses. Per FastAPI best practices, endpoints should use Pydantic BaseModel classes for request and response types. This enables automatic validation, OpenAPI schema generation, and type safety.
Current state:
- Endpoints return raw dicts (dict[str, Any])
- build_v1_api_response returns dict[str, Any]
- get_internal_api_response returns a dataclass (InternalApiResponse) — should be Pydantic model
- _extract_field_values returns dict[str, Any]
- No response validation
- OpenAPI spec lacks response schemas
Desired state:
- All endpoints use Pydantic response models
- build_v1_api_response returns a typed Pydantic model
- InternalApiResponse migrated from dataclass to Pydantic BaseModel
- Field extraction returns typed models
- OpenAPI spec auto-generates accurate response schemas
Endpoints to update:
- POST /v1/documents — upload response
- GET /v1/documents/{job_id} — job status / processing results
- GET /v1/schemas — schema list
- GET /v1/schemas/{document_type} — schema detail
- GET /v1/metrics — metrics response
- GET /health — health check
- GET /config — config response
Response builder to update:
- response_builder.build_v1_api_response() — return typed model instead of dict
- response_builder.get_internal_api_response() — migrate to Pydantic
- response_builder._extract_field_values() — return typed field model
- models.InternalApiResponse — convert from dataclass to BaseModel
- models.ClassificationData — consider converting to BaseModel
API endpoints and internal response builders currently return untyped dict responses. Per FastAPI best practices, endpoints should use Pydantic BaseModel classes for request and response types. This enables automatic validation, OpenAPI schema generation, and type safety.
Current state:
Desired state:
Endpoints to update:
Response builder to update: