#!/usr/bin/env python # -*- coding: utf-8 -*- """ 电子签章Schema定义 """ from datetime import datetime from typing import Optional, List from pydantic import BaseModel, ConfigDict, Field class ElectronicSealBase(BaseModel): """电子签章基础Schema""" name: str = Field(..., min_length=1, max_length=100, description="签章名称") seal_type: str = Field(..., description="类型: company/department/personal/contract/finance") description: Optional[str] = Field(default="", description="描述") seal_image_id: str = Field(..., description="签章图片文件ID") owner_type: str = Field(default="all", description="所有者类型: all/dept/role/user") owner_ids: Optional[List[str]] = Field(default=None, description="所有者ID列表") scope: str = Field(default="all", description="使用范围: all/specific") allowed_template_ids: Optional[List[str]] = Field(default=None, description="允许使用的模板ID列表") width: int = Field(default=120, ge=20, le=500, description="宽度(像素)") height: int = Field(default=120, ge=20, le=500, description="高度(像素)") class ElectronicSealCreate(ElectronicSealBase): """创建电子签章""" pass class ElectronicSealUpdate(BaseModel): """更新电子签章""" name: Optional[str] = Field(default=None, max_length=100, description="签章名称") description: Optional[str] = Field(default=None, description="描述") seal_image_id: Optional[str] = Field(default=None, description="签章图片文件ID") owner_type: Optional[str] = Field(default=None, description="所有者类型") owner_ids: Optional[List[str]] = Field(default=None, description="所有者ID列表") scope: Optional[str] = Field(default=None, description="使用范围") allowed_template_ids: Optional[List[str]] = Field(default=None, description="允许使用的模板ID列表") width: Optional[int] = Field(default=None, description="宽度") height: Optional[int] = Field(default=None, description="高度") status: Optional[str] = Field(default=None, description="状态") class ElectronicSealOut(ElectronicSealBase): """电子签章输出""" id: str status: str = "active" seal_image_url: Optional[str] = None sys_create_datetime: Optional[datetime] = None sys_update_datetime: Optional[datetime] = None model_config = ConfigDict(from_attributes=True) class SealUsageLogOut(BaseModel): """签章使用记录输出""" id: str seal_id: str seal_name: Optional[str] = None document_id: str document_name: Optional[str] = None user_id: str user_name: Optional[str] = None position_x: int = 0 position_y: int = 0 page_number: int = 1 sys_create_datetime: Optional[datetime] = None model_config = ConfigDict(from_attributes=True)