dikasterion/backend/app/schemas/case.py

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