mirror of
https://github.com/fastapi-practices/fastapi_best_architecture.git
synced 2026-03-13 09:31:31 +08:00
Add router jinja template for code generation (#1031)
This commit is contained in:
@@ -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='备注')
|
||||
|
||||
@@ -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='备注')
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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')
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user