- Introduced SQLAlchemy models for user management, project management, financial inputs, and pricing configuration. - Created navigation metadata tables for sidebar and top-level menus. - Cataloged enumerations used across ORM models and Pydantic schemas. - Documented Pydantic schemas for API request/response validation, including authentication, project, scenario, import, and export schemas. - Added monitoring and auditing tables for performance metrics and import/export logs. - Updated security documentation to reflect changes in data model references.
10 KiB
Pydantic Schemas
This page documents the Pydantic models used for request/response validation across the Calminer API surface. It was extracted from 02_data_model.md so API-facing contracts can evolve separately from the ORM layer.
Authentication Schemas (schemas/auth.py)
RegistrationForm
Form model for user registration.
| Field | Type | Validation |
|---|---|---|
| username | str | 3-128 characters |
| str | Valid email format, 5-255 chars | |
| password | str | 8-256 characters |
| confirm_password | str | Must match password |
LoginForm
Form model for user login.
| Field | Type | Validation |
|---|---|---|
| username | str | 1-255 characters |
| password | str | 1-256 characters |
PasswordResetRequestForm
Form model for password reset request.
| Field | Type | Validation |
|---|---|---|
| str | Valid email format, 5-255 chars |
PasswordResetForm
Form model for password reset.
| Field | Type | Validation |
|---|---|---|
| token | str | Required |
| password | str | 8-256 characters |
| confirm_password | str | Must match password |
Project Schemas (schemas/project.py)
ProjectBase
Base schema for project data.
| Field | Type | Description |
|---|---|---|
| name | str | Project name |
| location | str | None | Project location |
| operation_type | MiningOperationType | Mining operation type |
| description | str | None | Project description |
ProjectCreate
Schema for creating projects (inherits ProjectBase).
ProjectUpdate
Schema for updating projects.
| Field | Type | Description |
|---|---|---|
| name | str | None | Project name |
| location | str | None | Project location |
| operation_type | MiningOperationType | None | Mining operation type |
| description | str | None | Project description |
ProjectRead
Schema for reading projects (inherits ProjectBase).
| Field | Type | Description |
|---|---|---|
| id | int | Project ID |
| created_at | datetime | Creation timestamp |
| updated_at | datetime | Update timestamp |
Scenario Schemas (schemas/scenario.py)
ScenarioBase
Base schema for scenario data.
| Field | Type | Description |
|---|---|---|
| name | str | Scenario name |
| description | str | None | Scenario description |
| status | ScenarioStatus | Scenario status (default: DRAFT) |
| start_date | date | None | Start date |
| end_date | date | None | End date |
| discount_rate | float | None | Discount rate |
| currency | str | None | ISO currency code |
| primary_resource | ResourceType | None | Primary resource |
ScenarioCreate
Schema for creating scenarios (inherits ScenarioBase).
ScenarioUpdate
Schema for updating scenarios.
| Field | Type | Description |
|---|---|---|
| name | str | None | Scenario name |
| description | str | None | Scenario description |
| status | ScenarioStatus | None | Scenario status |
| start_date | date | None | Start date |
| end_date | date | None | End date |
| discount_rate | float | None | Discount rate |
| currency | str | None | ISO currency code |
| primary_resource | ResourceType | None | Primary resource |
ScenarioRead
Schema for reading scenarios (inherits ScenarioBase).
| Field | Type | Description |
|---|---|---|
| id | int | Scenario ID |
| project_id | int | Project ID |
| created_at | datetime | Creation timestamp |
| updated_at | datetime | Update timestamp |
ScenarioComparisonRequest
Schema for scenario comparison requests.
| Field | Type | Description |
|---|---|---|
| scenario_ids | list[int] | List of scenario IDs (minimum 2 unique) |
ScenarioComparisonResponse
Schema for scenario comparison responses.
| Field | Type | Description |
|---|---|---|
| project_id | int | Project ID |
| scenarios | list[ScenarioRead] | List of scenario data |
Import Schemas (schemas/imports.py)
ProjectImportRow
Schema for importing project data.
| Field | Type | Description |
|---|---|---|
| name | str | Project name (required) |
| location | str | None | Project location |
| operation_type | MiningOperationType | Mining operation type |
| description | str | None | Project description |
| created_at | datetime | None | Creation timestamp |
| updated_at | datetime | None | Update timestamp |
ScenarioImportRow
Schema for importing scenario data.
| Field | Type | Description |
|---|---|---|
| project_name | str | Project name (required) |
| name | str | Scenario name (required) |
| status | ScenarioStatus | Scenario status (default: DRAFT) |
| start_date | date | None | Start date |
| end_date | date | None | End date |
| discount_rate | float | None | Discount rate |
| currency | str | None | ISO currency code |
| primary_resource | ResourceType | None | Primary resource |
| description | str | None | Scenario description |
| created_at | datetime | None | Creation timestamp |
| updated_at | datetime | None | Update timestamp |
Export Schemas (schemas/exports.py)
ExportFormat
Enumeration for export formats.
CSV: CSV formatXLSX: Excel format
BaseExportRequest
Base schema for export requests.
| Field | Type | Description |
|---|---|---|
| format | ExportFormat | Export format (default: CSV) |
| include_metadata | bool | Include metadata (default: False) |
ProjectExportRequest
Schema for project export requests (inherits BaseExportRequest).
| Field | Type | Description |
|---|---|---|
| filters | ProjectExportFilters | None | Export filters |
ScenarioExportRequest
Schema for scenario export requests (inherits BaseExportRequest).
| Field | Type | Description |
|---|---|---|
| filters | ScenarioExportFilters | None | Export filters |
ExportTicket
Schema for export tickets.
| Field | Type | Description |
|---|---|---|
| token | str | Export token |
| format | ExportFormat | Export format |
| resource | Literal["projects", "scenarios"] | Resource type |
ExportResponse
Schema for export responses.
| Field | Type | Description |
|---|---|---|
| ticket | ExportTicket | Export ticket |
Discrepancies Between Data Models and Pydantic Schemas
Missing Pydantic Schemas
The following SQLAlchemy models do not have corresponding Pydantic schemas:
User- Authentication handled through forms, not API schemasRole- Role management not exposed via APIUserRole- User-role associations not exposed via APIFinancialInput- Financial inputs managed through scenario contextSimulationParameter- Simulation parameters managed through scenario contextPricingSettings- Pricing settings managed through project contextPricingMetalSettings- Pricing overrides managed through settings contextPricingImpuritySettings- Pricing overrides managed through settings contextPerformanceMetric- Metrics not exposed via APIImportExportLog- Audit logs not exposed via API
Schema Differences
- Project schemas include
operation_typeas required enum, while the model allows null but defaults toOTHER - Scenario schemas include currency normalization validation not present in the model validator
- Import schemas include extensive validation and coercion logic for CSV/Excel data parsing
- Export schemas reference filter classes (
ProjectExportFilters,ScenarioExportFilters) not defined in this document
Additional Validation
Pydantic schemas include additional validation beyond SQLAlchemy model constraints:
- Email format validation in auth forms
- Password confirmation matching
- Currency code normalization and validation
- Date range validation (end_date >= start_date)
- Required field validation for imports
- Enum value coercion with aliases for imports
Refer back to the data model overview when aligning ORM entities with these schemas.