76 lines
4.4 KiB
Python
76 lines
4.4 KiB
Python
# yargitay_mcp_module/models.py
|
|
|
|
from pydantic import BaseModel, Field, HttpUrl
|
|
from typing import List, Optional, Dict, Any
|
|
|
|
class YargitayDetailedSearchRequest(BaseModel):
|
|
"""
|
|
Model for the 'data' object sent in the request payload
|
|
to Yargitay's detailed search endpoint (e.g., /aramadetaylist).
|
|
Based on the payload provided by the user.
|
|
"""
|
|
arananKelime: Optional[str] = Field("", description="Keyword to search for.")
|
|
# Department/Board selection. Based on user provided payload.
|
|
# birimYrg* fields seem to be the ones used for filtering.
|
|
birimYrgKurulDaire: Optional[str] = Field("", description="Yargitay Board Unit (e.g., 'Hukuk Genel Kurulu').")
|
|
birimYrgHukukDaire: Optional[str] = Field("", description="Yargitay Civil Chamber (e.g., '1. Hukuk Dairesi').")
|
|
birimYrgCezaDaire: Optional[str] = Field("", description="Yargitay Criminal Chamber.")
|
|
|
|
esasYil: Optional[str] = Field("", description="Case year for 'Esas No'.")
|
|
esasIlkSiraNo: Optional[str] = Field("", description="Starting sequence number for 'Esas No'.")
|
|
esasSonSiraNo: Optional[str] = Field("", description="Ending sequence number for 'Esas No'.")
|
|
|
|
kararYil: Optional[str] = Field("", description="Decision year for 'Karar No'.")
|
|
kararIlkSiraNo: Optional[str] = Field("", description="Starting sequence number for 'Karar No'.")
|
|
kararSonSiraNo: Optional[str] = Field("", description="Ending sequence number for 'Karar No'.")
|
|
|
|
baslangicTarihi: Optional[str] = Field("", description="Start date for decision search (DD.MM.YYYY).")
|
|
bitisTarihi: Optional[str] = Field("", description="End date for decision search (DD.MM.YYYY).")
|
|
|
|
siralama: Optional[str] = Field("3", description="Sorting criteria (1: Esas No, 2: Karar No, 3: Karar Tarihi).") # Default to 'Karar Tarihine Göre'
|
|
siralamaDirection: Optional[str] = Field("desc", description="Sorting direction ('asc' or 'desc').") # Default to 'Büyükten Küçüğe'
|
|
|
|
pageSize: int = Field(10, ge=1, le=100, description="Number of results per page.")
|
|
pageNumber: int = Field(1, ge=1, description="Page number to retrieve.")
|
|
|
|
class YargitayApiDecisionEntry(BaseModel):
|
|
"""Model for an individual decision entry from the Yargitay API search response."""
|
|
id: str # Unique system ID of the decision
|
|
daire: Optional[str] = Field(None, description="The chamber that made the decision.")
|
|
esasNo: Optional[str] = Field(None, alias="esasNo", description="Case registry number ('Esas No').")
|
|
kararNo: Optional[str] = Field(None, alias="kararNo", description="Decision number ('Karar No').")
|
|
kararTarihi: Optional[str] = Field(None, alias="kararTarihi", description="Date of the decision.")
|
|
arananKelime: Optional[str] = Field(None, alias="arananKelime", description="Matched keyword in the search result item.")
|
|
# 'index' and 'siraNo' from API response are not critical for MCP tool, so omitted for brevity
|
|
|
|
# This field will be populated by the client after fetching the search list
|
|
document_url: Optional[HttpUrl] = Field(None, description="Direct URL to the decision document.")
|
|
|
|
class Config:
|
|
populate_by_name = True # To allow populating by alias from API response
|
|
|
|
|
|
class YargitayApiResponseInnerData(BaseModel):
|
|
"""Model for the inner 'data' object in the Yargitay API search response."""
|
|
data: List[YargitayApiDecisionEntry]
|
|
# draw: Optional[int] = None # Typically used by DataTables, not essential for MCP
|
|
recordsTotal: int # Total number of records matching the query
|
|
recordsFiltered: int # Total number of records after filtering (usually same as recordsTotal)
|
|
|
|
class YargitayApiSearchResponse(BaseModel):
|
|
"""Model for the complete search response from the Yargitay API."""
|
|
data: YargitayApiResponseInnerData
|
|
# metadata: Optional[Dict[str, Any]] = None # Optional metadata from API
|
|
|
|
class YargitayDocumentMarkdown(BaseModel):
|
|
"""Model for a Yargitay decision document, containing only Markdown content."""
|
|
id: str = Field(..., description="The unique ID of the document.")
|
|
markdown_content: Optional[str] = Field(None, description="The decision content converted to Markdown.")
|
|
source_url: HttpUrl = Field(..., description="The source URL of the original document.")
|
|
|
|
class CompactYargitaySearchResult(BaseModel):
|
|
"""A more compact search result model for the MCP tool to return."""
|
|
decisions: List[YargitayApiDecisionEntry]
|
|
total_records: int
|
|
requested_page: int
|
|
page_size: int |