Spaces:
Running
Running
| from typing import Optional | |
| from datetime import datetime | |
| from pydantic import BaseModel, EmailStr, Field | |
| class UserCreate(BaseModel): | |
| email: EmailStr | |
| password: str = Field(min_length=6) | |
| display_name: str | |
| organization: Optional[str] = None | |
| role: Optional[str] = Field(default="citizen") | |
| class UserLogin(BaseModel): | |
| email: EmailStr | |
| password: str | |
| class UserInDB(BaseModel): | |
| id: str | |
| email: EmailStr | |
| display_name: str | |
| organization: Optional[str] | |
| role: Optional[str] | |
| created_at: datetime | |
| class TokenResponse(BaseModel): | |
| access_token: str | |
| token_type: str = "bearer" | |
| user: UserInDB | |
| class IncidentCreate(BaseModel): | |
| description: str | |
| latitude: float | |
| longitude: float | |
| class IncidentInDB(BaseModel): | |
| id: str | |
| description: str | |
| latitude: float | |
| longitude: float | |
| incident_class: str | |
| severity: str | |
| created_at: datetime | |
| reporter_id: Optional[str] | |
| image_path: Optional[str] | |
| status: Optional[str] = None | |
| validated_by: Optional[str] = None | |
| validated_at: Optional[datetime] = None | |
| validator_comment: Optional[str] = None | |
| class IncidentResponse(BaseModel): | |
| incident_class: str | |
| severity: str | |
| incident_id: str | |
| confidence_scores: Optional[dict] = None | |
| class IncidentList(BaseModel): | |
| incidents: list | |
| class PolicyCreate(BaseModel): | |
| title: str = Field(min_length=3, max_length=200) | |
| description: str = Field(min_length=10) | |
| category: str # e.g., "Marine Conservation", "Pollution Control", "Fisheries Management" | |
| status: str = Field(default="draft") # draft, under_review, active, implemented, archived | |
| implementation_date: Optional[datetime] = None | |
| target_region: Optional[str] = None | |
| impact_level: Optional[str] = None # low, medium, high, critical | |
| regulatory_body: Optional[str] = None | |
| compliance_rate: Optional[float] = Field(default=0.0, ge=0.0, le=100.0) | |
| budget_allocated: Optional[float] = None | |
| enforcement_mechanism: Optional[str] = None | |
| related_policies: Optional[list[str]] = [] | |
| tags: Optional[list[str]] = [] | |
| class PolicyUpdate(BaseModel): | |
| title: Optional[str] = Field(None, min_length=3, max_length=200) | |
| description: Optional[str] = Field(None, min_length=10) | |
| category: Optional[str] = None | |
| status: Optional[str] = None | |
| implementation_date: Optional[datetime] = None | |
| target_region: Optional[str] = None | |
| impact_level: Optional[str] = None | |
| regulatory_body: Optional[str] = None | |
| compliance_rate: Optional[float] = Field(None, ge=0.0, le=100.0) | |
| budget_allocated: Optional[float] = None | |
| enforcement_mechanism: Optional[str] = None | |
| related_policies: Optional[list[str]] = None | |
| tags: Optional[list[str]] = None | |
| class PolicyInDB(BaseModel): | |
| id: str | |
| title: str | |
| description: str | |
| category: str | |
| status: str | |
| created_at: datetime | |
| updated_at: datetime | |
| created_by: str | |
| implementation_date: Optional[datetime] = None | |
| target_region: Optional[str] = None | |
| impact_level: Optional[str] = None | |
| regulatory_body: Optional[str] = None | |
| compliance_rate: float = 0.0 | |
| budget_allocated: Optional[float] = None | |
| enforcement_mechanism: Optional[str] = None | |
| related_policies: list[str] = [] | |
| tags: list[str] = [] | |
| class PolicyResponse(BaseModel): | |
| policy: PolicyInDB | |
| class PolicyList(BaseModel): | |
| policies: list[PolicyInDB] | |
| total: int | |