mirror of
https://github.com/fastapi-practices/fastapi_best_architecture.git
synced 2026-03-13 09:31:31 +08:00
* Optimize code generation data processing * Add SQL script generation * Update code gen table scripts * Update types * Fix model jinja and type conversion
50 lines
2.0 KiB
Python
50 lines
2.0 KiB
Python
from datetime import datetime
|
|
|
|
from pydantic import ConfigDict, Field, field_validator
|
|
|
|
from backend.common.exception import errors
|
|
from backend.common.schema import SchemaBase
|
|
from backend.utils.pattern_validate import is_english_identifier
|
|
|
|
|
|
class GenBusinessSchemaBase(SchemaBase):
|
|
"""代码生成业务基础模型"""
|
|
|
|
app_name: str = Field(description='应用名称(英文)')
|
|
table_name: str = Field(description='表名称(英文)')
|
|
doc_comment: str = Field(description='文档注释(用于函数/参数文档)')
|
|
table_comment: str | None = Field(None, description='表描述')
|
|
class_name: str | None = Field(None, description='用于 python 代码基础类名')
|
|
schema_name: str | None = Field(None, description='用于 python Schema 代码基础类名')
|
|
filename: str | None = Field(None, description='用于 python 代码基础文件名')
|
|
datetime_mixin: bool = Field(True, description='是否包含时间 Mixin 列')
|
|
api_version: str = Field('v1', description='API 版本')
|
|
gen_path: str | None = Field(None, description='生成路径(默认在 backend/app 目录下)')
|
|
remark: str | None = Field(None, description='备注')
|
|
|
|
@field_validator('app_name', 'table_name')
|
|
@classmethod
|
|
def validate_english_only(cls, v: str) -> str:
|
|
"""验证英文字段"""
|
|
if not is_english_identifier(v):
|
|
raise errors.RequestError(msg='必须以英文字母开头且只能包含英文字母和下划线')
|
|
return v
|
|
|
|
|
|
class CreateGenBusinessParam(GenBusinessSchemaBase):
|
|
"""创建代码生成业务参数"""
|
|
|
|
|
|
class UpdateGenBusinessParam(GenBusinessSchemaBase):
|
|
"""更新代码生成业务参数"""
|
|
|
|
|
|
class GetGenBusinessDetail(GenBusinessSchemaBase):
|
|
"""获取代码生成业务详情"""
|
|
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
id: int = Field(description='主键 ID')
|
|
created_time: datetime = Field(description='创建时间')
|
|
updated_time: datetime | None = Field(None, description='更新时间')
|