"""Pydantic schemas for the 周期性自我检查 router.""" from __future__ import annotations from uuid import UUID from pydantic import BaseModel, Field class CategoryCreateRequest(BaseModel): key: str = Field(min_length=2, max_length=64) name: str = Field(min_length=1, max_length=128) group_label: str | None = Field(default=None, max_length=64) periodicity: str = Field(default="quarterly") check_item: str = Field(min_length=1, max_length=4000) guidance: str | None = Field(default=None, max_length=8000) default_checker_person_id: UUID | None = None requires_attachment: bool = True enabled: bool = True sort_order: int = 0 class CategoryUpdateRequest(BaseModel): name: str | None = Field(default=None, max_length=128) group_label: str | None = Field(default=None, max_length=64) periodicity: str | None = None check_item: str | None = Field(default=None, max_length=4000) guidance: str | None = Field(default=None, max_length=8000) default_checker_person_id: UUID | None = None requires_attachment: bool | None = None enabled: bool | None = None sort_order: int | None = None class RecordManualCreateRequest(BaseModel): category_id: UUID period_year: int = Field(ge=2000, le=2100) period_label: str = Field(min_length=2, max_length=16) class RecordCompleteRequest(BaseModel): outcome: str = Field(default="normal") remark: str | None = Field(default=None, max_length=8000) class RecordSkipRequest(BaseModel): remark: str | None = Field(default=None, max_length=8000) class RecordRemarkRequest(BaseModel): remark: str | None = Field(default=None, max_length=8000) class AttachmentPresignRequest(BaseModel): filename: str = Field(min_length=1, max_length=255) content_type: str = Field(min_length=3, max_length=128) size_bytes: int = Field(gt=0) checksum_sha256: str = Field(min_length=44, max_length=44) class AttachmentRegisterRequest(BaseModel): object_key: str = Field(min_length=1, max_length=512) filename: str = Field(min_length=1, max_length=255) content_type: str = Field(min_length=3, max_length=128) size_bytes: int | None = Field(default=None, ge=0)