from datetime import datetime from decimal import Decimal from typing import Optional from pydantic import BaseModel, ConfigDict, Field class PointsCreateSchema(BaseModel): """创建积分账户请求""" tenant_id: int = Field(description="租户ID") points: Decimal = Field(default=Decimal("0.00"), max_digits=10, decimal_places=2, description="初始积分") class PointsUpdateSchema(BaseModel): """更新积分请求""" points: Decimal = Field(max_digits=10, decimal_places=2, description="积分余额") class PointsOutSchema(BaseModel): """积分详情响应""" model_config = ConfigDict(from_attributes=True) id: int = Field(description="主键ID") tenant_id: Optional[int] = Field(default=None, description="租户ID") points: Optional[Decimal] = Field(default=Decimal("0.00"), max_digits=10, decimal_places=2, description="积分余额") status: Optional[str] = Field(default=None, description="状态") created_time: Optional[datetime] = Field(default=None, description="创建时间") updated_time: Optional[datetime] = Field(default=None, description="更新时间") class PointsChangeSchema(BaseModel): """积分变动请求""" points: Decimal = Field(max_digits=10, decimal_places=2, gt=0, description="变动积分") change_type: str = Field(description="变动类型: ADD/DEDUCT") enterprise_id: Optional[str] = Field(default=None, description="企业ID") employee_id: Optional[str] = Field(default=None, description="员工ID") business_id: Optional[str] = Field(default=None, description="业务ID") business_type: Optional[str] = Field(default=None, description="业务类型") remark: Optional[str] = Field(default=None, description="备注") class PointsRecordOutSchema(BaseModel): """积分记录响应""" model_config = ConfigDict(from_attributes=True) tenant_id: Optional[int] = Field(default=None, description="租户ID") enterprise_id: Optional[str] = Field(default=None, description="企业ID") employee_id: Optional[str] = Field(default=None, description="员工ID") points: Optional[Decimal] = Field(default=Decimal("0.00"), max_digits=10, decimal_places=2, description="变动积分") balance: Optional[Decimal] = Field(default=Decimal("0.00"), max_digits=10, decimal_places=2, description="变动后余额") type: Optional[str] = Field(default=None, description="变动类型") business_type: Optional[str] = Field(default=None, description="业务类型") business_id: Optional[str] = Field(default=None, description="业务ID") remark: Optional[str] = Field(default=None, description="备注") created_time: Optional[datetime] = Field(default=None, description="创建时间")