Sanjay / app /schemas.py
TheDeepDas's picture
Researcher Dashboard
6e2603f
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