This commit is contained in:
2026-03-12 12:32:29 +08:00
parent c0f9ddabbf
commit 470446fa6f
18 changed files with 591 additions and 142 deletions

View File

@@ -1,7 +1,7 @@
from pydantic import BaseModel
from app.schemas.base import CamelModel
class AnalysisStatusOut(BaseModel):
class AnalysisStatusOut(CamelModel):
case_id: str
status: str
progress: int = 0
@@ -9,6 +9,6 @@ class AnalysisStatusOut(BaseModel):
message: str = ""
class AnalysisTriggerOut(BaseModel):
class AnalysisTriggerOut(CamelModel):
task_id: str
message: str

View File

@@ -1,13 +1,12 @@
from datetime import datetime
from uuid import UUID
from pydantic import BaseModel
from app.models.assessment import ConfidenceLevel, ReviewStatus
from app.schemas.base import CamelModel
from app.schemas.transaction import TransactionOut
class AssessmentOut(BaseModel):
class AssessmentOut(CamelModel):
id: UUID
case_id: UUID
transaction_id: UUID
@@ -21,19 +20,17 @@ class AssessmentOut(BaseModel):
reviewed_by: str
reviewed_at: datetime | None = None
model_config = {"from_attributes": True}
class AssessmentListOut(BaseModel):
class AssessmentListOut(CamelModel):
items: list[AssessmentOut]
total: int
class ReviewSubmit(BaseModel):
class ReviewSubmit(CamelModel):
review_status: ReviewStatus
review_note: str = ""
reviewed_by: str = "demo_user"
class InquirySuggestionOut(BaseModel):
class InquirySuggestionOut(CamelModel):
suggestions: list[str]

View File

@@ -0,0 +1,15 @@
"""Base schema with camelCase JSON serialization."""
from pydantic import BaseModel, ConfigDict
def to_camel(s: str) -> str:
parts = s.split("_")
return parts[0] + "".join(p.capitalize() for p in parts[1:])
class CamelModel(BaseModel):
model_config = ConfigDict(
from_attributes=True,
alias_generator=to_camel,
populate_by_name=True,
)

View File

@@ -1,26 +1,25 @@
from datetime import datetime
from uuid import UUID
from pydantic import BaseModel
from app.models.case import CaseStatus
from app.schemas.base import CamelModel
class CaseCreate(BaseModel):
class CaseCreate(CamelModel):
case_no: str
title: str
victim_name: str
handler: str = ""
class CaseUpdate(BaseModel):
class CaseUpdate(CamelModel):
title: str | None = None
victim_name: str | None = None
handler: str | None = None
status: CaseStatus | None = None
class CaseOut(BaseModel):
class CaseOut(CamelModel):
id: UUID
case_no: str
title: str
@@ -32,9 +31,7 @@ class CaseOut(BaseModel):
created_at: datetime
updated_at: datetime
model_config = {"from_attributes": True}
class CaseListOut(BaseModel):
class CaseListOut(CamelModel):
items: list[CaseOut]
total: int

View File

@@ -1,12 +1,11 @@
from datetime import datetime
from uuid import UUID
from pydantic import BaseModel
from app.models.evidence_image import SourceApp, PageType, OcrStatus
from app.schemas.base import CamelModel
class ImageOut(BaseModel):
class ImageOut(CamelModel):
id: UUID
case_id: UUID
url: str = ""
@@ -17,24 +16,25 @@ class ImageOut(BaseModel):
file_hash: str
uploaded_at: datetime
model_config = {"from_attributes": True}
class OcrBlockOut(BaseModel):
class OcrBlockOut(CamelModel):
id: UUID
content: str
bbox: dict
seq_order: int
confidence: float
model_config = {"from_attributes": True}
class ImageDetailOut(ImageOut):
ocr_blocks: list[OcrBlockOut] = []
class OcrFieldCorrection(BaseModel):
class OcrFieldCorrection(CamelModel):
field_name: str
old_value: str
new_value: str
class CaseOcrStartIn(CamelModel):
include_done: bool = False
image_ids: list[UUID] = []

View File

@@ -1,12 +1,11 @@
from datetime import datetime
from uuid import UUID
from pydantic import BaseModel
from app.models.report import ReportType
from app.schemas.base import CamelModel
class ReportCreate(BaseModel):
class ReportCreate(CamelModel):
report_type: ReportType
include_summary: bool = True
include_transactions: bool = True
@@ -17,7 +16,7 @@ class ReportCreate(BaseModel):
include_screenshots: bool = False
class ReportOut(BaseModel):
class ReportOut(CamelModel):
id: UUID
case_id: UUID
report_type: ReportType
@@ -25,9 +24,7 @@ class ReportOut(BaseModel):
version: int
created_at: datetime
model_config = {"from_attributes": True}
class ReportListOut(BaseModel):
class ReportListOut(CamelModel):
items: list[ReportOut]
total: int

View File

@@ -1,13 +1,12 @@
from datetime import datetime
from uuid import UUID
from pydantic import BaseModel
from app.models.evidence_image import SourceApp
from app.models.transaction import Direction
from app.schemas.base import CamelModel
class TransactionOut(BaseModel):
class TransactionOut(CamelModel):
id: UUID
case_id: UUID
source_app: SourceApp
@@ -25,21 +24,19 @@ class TransactionOut(BaseModel):
is_duplicate: bool
is_transit: bool
model_config = {"from_attributes": True}
class TransactionListOut(BaseModel):
class TransactionListOut(CamelModel):
items: list[TransactionOut]
total: int
class FlowNodeOut(BaseModel):
class FlowNodeOut(CamelModel):
id: str
label: str
type: str
class FlowEdgeOut(BaseModel):
class FlowEdgeOut(CamelModel):
source: str
target: str
amount: float
@@ -47,6 +44,6 @@ class FlowEdgeOut(BaseModel):
trade_time: str
class FlowGraphOut(BaseModel):
class FlowGraphOut(CamelModel):
nodes: list[FlowNodeOut]
edges: list[FlowEdgeOut]