| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- from datetime import datetime
- from typing import Literal, Optional
- from pydantic import BaseModel, Field, model_validator
- # ---------- 局部块更新 ----------
- class BlockUpdate(BaseModel):
- level: int = Field(..., ge=1, le=6)
- index: int = Field(..., ge=0)
- content: str
- # ---------- 请求 ----------
- class CreateDocumentRequest(BaseModel):
- user_id: str = Field(..., alias="userId")
- file_url: str = Field(..., alias="fileUrl")
- session_id: str = Field(..., alias="sessionId")
- model_config = {"populate_by_name": True}
- class UpdateDocumentRequest(BaseModel):
- content: Optional[str] = None
- blocks: Optional[list[BlockUpdate]] = None
- @model_validator(mode="after")
- def check_content_or_blocks(self) -> "UpdateDocumentRequest":
- if self.content is not None and self.blocks is not None:
- raise ValueError("content 与 blocks 不能同时传入")
- return self
- # ---------- 响应 ----------
- class DocumentResponse(BaseModel):
- id: str
- content: str
- format: str
- session_id: str = Field(..., serialization_alias="sessionId")
- user_id: Optional[str] = Field(None, serialization_alias="userId")
- created_at: datetime = Field(..., serialization_alias="createdAt")
- updated_at: datetime = Field(..., serialization_alias="updatedAt")
- model_config = {"from_attributes": True, "populate_by_name": True}
- class DocumentListItem(BaseModel):
- id: str
- session_id: str = Field(..., serialization_alias="sessionId")
- created_at: datetime = Field(..., serialization_alias="createdAt")
- updated_at: datetime = Field(..., serialization_alias="updatedAt")
- model_config = {"from_attributes": True, "populate_by_name": True}
- class Pagination(BaseModel):
- page: int
- page_size: int = Field(..., serialization_alias="pageSize")
- total: int
- total_pages: int = Field(..., serialization_alias="totalPages")
- model_config = {"populate_by_name": True}
|