From f2b246089d15b3849ba3bd65dd995c89bd478cc4 Mon Sep 17 00:00:00 2001 From: Wu Clan Date: Fri, 23 Jan 2026 10:39:47 +0800 Subject: [PATCH] Add router jinja template for code generation (#1031) --- backend/plugin/code_generator/model/business.py | 1 + backend/plugin/code_generator/schema/business.py | 1 + backend/plugin/code_generator/service/gen_service.py | 4 +++- .../plugin/code_generator/templates/python/router.jinja | 8 ++++++++ backend/plugin/code_generator/utils/gen_template.py | 3 +++ 5 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 backend/plugin/code_generator/templates/python/router.jinja diff --git a/backend/plugin/code_generator/model/business.py b/backend/plugin/code_generator/model/business.py index 830e5c58..bae4162d 100644 --- a/backend/plugin/code_generator/model/business.py +++ b/backend/plugin/code_generator/model/business.py @@ -20,5 +20,6 @@ class GenBusiness(Base): filename: Mapped[str | None] = mapped_column(sa.String(64), default=None, comment='基础文件名') datetime_mixin: Mapped[bool] = mapped_column(default=True, comment='是否包含时间 Mixin 列') api_version: Mapped[str] = mapped_column(sa.String(32), default='v1', comment='API 版本') + tag: Mapped[str | None] = mapped_column(sa.String(64), default=None, comment='API 标签') gen_path: Mapped[str | None] = mapped_column(sa.String(256), default=None, comment='生成路径') remark: Mapped[str | None] = mapped_column(UniversalText, default=None, comment='备注') diff --git a/backend/plugin/code_generator/schema/business.py b/backend/plugin/code_generator/schema/business.py index 7e258167..e80b6124 100644 --- a/backend/plugin/code_generator/schema/business.py +++ b/backend/plugin/code_generator/schema/business.py @@ -19,6 +19,7 @@ class GenBusinessSchemaBase(SchemaBase): filename: str | None = Field(None, description='用于 python 代码基础文件名') datetime_mixin: bool = Field(True, description='是否包含时间 Mixin 列') api_version: str = Field('v1', description='API 版本') + tag: str | None = Field(None, description='API 标签(用于路由分组)') gen_path: str | None = Field(None, description='生成路径(默认在 backend/app 目录下)') remark: str | None = Field(None, description='备注') diff --git a/backend/plugin/code_generator/service/gen_service.py b/backend/plugin/code_generator/service/gen_service.py index b9715e61..ba9bda58 100644 --- a/backend/plugin/code_generator/service/gen_service.py +++ b/backend/plugin/code_generator/service/gen_service.py @@ -60,15 +60,17 @@ class GenService: raise errors.ConflictError(msg='已存在相同数据库表业务') table_name = table_info['table_name'] + doc_comment = table_info['table_comment'] or table_name.split('_')[-1] new_business = GenBusiness( **CreateGenBusinessParam( app_name=obj.app, table_name=table_name, - doc_comment=table_info['table_comment'] or table_name.split('_')[-1], + doc_comment=doc_comment, table_comment=table_info['table_comment'], class_name=to_pascal(table_name), schema_name=to_pascal(table_name), filename=table_name, + tag=doc_comment, ).model_dump(), ) db.add(new_business) diff --git a/backend/plugin/code_generator/templates/python/router.jinja b/backend/plugin/code_generator/templates/python/router.jinja new file mode 100644 index 00000000..524c48ca --- /dev/null +++ b/backend/plugin/code_generator/templates/python/router.jinja @@ -0,0 +1,8 @@ +from fastapi import APIRouter + +from backend.app.{{ app_name }}.api.{{ api_version }}.{{ filename }} import router as {{ table_name }}_router +from backend.core.conf import settings + +v1 = APIRouter(prefix=settings.FASTAPI_API_V1_PATH{% if tag %}, tags=['{{ tag }}']{% endif %}) + +v1.include_router({{ table_name }}_router, prefix='/{{ table_name.replace('_', '-') }}s') diff --git a/backend/plugin/code_generator/utils/gen_template.py b/backend/plugin/code_generator/utils/gen_template.py index 1f81ea50..eb3ed4ef 100644 --- a/backend/plugin/code_generator/utils/gen_template.py +++ b/backend/plugin/code_generator/utils/gen_template.py @@ -49,6 +49,7 @@ class GenTemplate: return { 'python/api.jinja': f'{app_name}/api/{api_version}/{filename}.py', + 'python/router.jinja': f'{app_name}/api/router.py', 'python/crud.jinja': f'{app_name}/crud/crud_{filename}.py', 'python/model.jinja': f'{app_name}/model/{filename}.py', 'python/schema.jinja': f'{app_name}/schema/{filename}.py', @@ -99,6 +100,8 @@ class GenTemplate: 'schema_name': business.schema_name, 'filename': business.filename, 'datetime_mixin': business.datetime_mixin, + 'api_version': business.api_version, + 'tag': business.tag, 'permission': business.table_name.replace('_', ':'), 'database_type': settings.DATABASE_TYPE, 'models': models,