Files
ca_auto_table/back/apis/country/shop/schema.py
2025-11-20 21:42:20 +08:00

75 lines
2.2 KiB
Python

from datetime import datetime, timezone, timedelta
from pydantic import BaseModel, Field, computed_field
from typing import List
from uuid import UUID
from utils.time_tool import TimestampModel
CHINA_TZ = timezone(timedelta(hours=8))
class Base(BaseModel):
"""
基础店铺信息模型
包含店铺相关的通用字段,供创建与输出模型复用
"""
province: str | None = Field(None, description='省份')
city: str = Field(..., description='城市')
street: str = Field(..., description='街道')
shop_name: str = Field(..., description='店铺名称')
shop_number: str | None = Field(None, description='店铺号码')
class Create(Base):
"""
创建请求模型
"""
pass
class Update(BaseModel):
"""
更新请求模型,支持部分更新
"""
province: str | None = Field(None, description='省份')
city: str | None = Field(None, description='城市')
street: str | None = Field(None, description='街道')
shop_name: str | None = Field(None, description='店铺名称')
shop_number: str | None = Field(None, description='店铺号码')
class Out(TimestampModel, Base):
"""
输出模型
"""
code: int = Field(200, description='状态码')
message: str = Field('成功', description='提示信息')
id: UUID = Field(..., description='ID')
create_time: datetime = Field(..., description='创建时间')
update_time: datetime = Field(..., description='更新时间')
@computed_field
@property
def create_time_cn(self) -> str:
return self.create_time.astimezone(CHINA_TZ).strftime("%Y-%m-%d %H:%M:%S")
@computed_field
@property
def update_time_cn(self) -> str:
return self.update_time.astimezone(CHINA_TZ).strftime("%Y-%m-%d %H:%M:%S")
class Config:
from_attributes = True
class OutList(BaseModel):
"""
列表输出模型
"""
code: int = Field(200, description='状态码')
message: str = Field('成功', description='提示信息')
count: int = Field(0, description='总数')
num: int = Field(0, description='当前数量')
items: List[Out] = Field([], description='列表数据')