62 lines
1.5 KiB
Python
62 lines
1.5 KiB
Python
from pydantic import BaseModel, Field
|
|
from typing import Optional, List, Literal
|
|
from datetime import datetime
|
|
from enum import Enum
|
|
|
|
class CaseStatus(str, Enum):
|
|
PENDING = "pending"
|
|
ACCEPTED = "accepted"
|
|
HEARING = "hearing"
|
|
VERDICT = "verdict"
|
|
CLOSED = "closed"
|
|
DECLINED = "declined"
|
|
|
|
class CaseBase(BaseModel):
|
|
title: str = Field(..., min_length=5, max_length=255)
|
|
description: str = Field(..., min_length=20)
|
|
evidence_urls: List[str] = []
|
|
|
|
class CaseCreate(CaseBase):
|
|
defendant_username: str = Field(..., min_length=3)
|
|
|
|
class JudgeInfo(BaseModel):
|
|
id: int
|
|
username: str
|
|
type: str
|
|
status: str
|
|
vote: Optional[str] = None
|
|
reasoning: Optional[str] = None
|
|
voted_at: Optional[datetime] = None
|
|
|
|
class CaseResponse(BaseModel):
|
|
id: int
|
|
case_number: str
|
|
title: str
|
|
status: CaseStatus
|
|
created_at: datetime
|
|
hearing_deadline: Optional[datetime] = None
|
|
verdict: Optional[str] = None
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
class CaseDetail(CaseResponse):
|
|
description: str
|
|
evidence_urls: List[str]
|
|
plaintiff: dict
|
|
defendant: dict
|
|
judge_assignments: List[JudgeInfo]
|
|
verdict_reason: Optional[str] = None
|
|
defendant_response: Optional[str] = None
|
|
|
|
class DefendantResponse(BaseModel):
|
|
accept_jurisdiction: bool
|
|
response_text: Optional[str] = None
|
|
|
|
class JudgeVote(BaseModel):
|
|
vote: Literal["guilty", "innocent", "abstain"]
|
|
reasoning: str = Field(..., min_length=10)
|
|
|
|
class JudgeAcceptance(BaseModel):
|
|
accept: bool
|