Skip to content

Commit 80cef6d

Browse files
authored
Update code generator file and table naming (#579)
* Update code generator file and table naming * Update column table comment
1 parent 2d504f2 commit 80cef6d

16 files changed

+261
-262
lines changed

backend/plugin/code_generator/api/router.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
from fastapi import APIRouter
44

55
from backend.core.conf import settings
6+
from backend.plugin.code_generator.api.v1.business import router as gen_business_router
7+
from backend.plugin.code_generator.api.v1.column import router as gen_model_router
68
from backend.plugin.code_generator.api.v1.gen import router as gen_router
7-
from backend.plugin.code_generator.api.v1.gen_business import router as gen_business_router
8-
from backend.plugin.code_generator.api.v1.gen_model import router as gen_model_router
99

1010
v1 = APIRouter(prefix=f'{settings.FASTAPI_API_V1_PATH}/gen', tags=['代码生成'])
1111

backend/plugin/code_generator/api/v1/gen_business.py renamed to backend/plugin/code_generator/api/v1/business.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@
88
from backend.common.security.jwt import DependsJwtAuth
99
from backend.common.security.permission import RequestPermission
1010
from backend.common.security.rbac import DependsRBAC
11-
from backend.plugin.code_generator.schema.gen_business import (
11+
from backend.plugin.code_generator.schema.business import (
1212
CreateGenBusinessParam,
1313
GetGenBusinessDetail,
1414
UpdateGenBusinessParam,
1515
)
16-
from backend.plugin.code_generator.schema.gen_model import GetGenModelDetail
17-
from backend.plugin.code_generator.service.gen_business_service import gen_business_service
18-
from backend.plugin.code_generator.service.gen_model_service import gen_model_service
16+
from backend.plugin.code_generator.schema.column import GetGenModelDetail
17+
from backend.plugin.code_generator.service.business_service import gen_business_service
18+
from backend.plugin.code_generator.service.column_service import gen_model_service
1919

2020
router = APIRouter()
2121

backend/plugin/code_generator/api/v1/gen_model.py renamed to backend/plugin/code_generator/api/v1/column.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
from backend.common.security.jwt import DependsJwtAuth
99
from backend.common.security.permission import RequestPermission
1010
from backend.common.security.rbac import DependsRBAC
11-
from backend.plugin.code_generator.schema.gen_model import CreateGenModelParam, GetGenModelDetail, UpdateGenModelParam
12-
from backend.plugin.code_generator.service.gen_model_service import gen_model_service
11+
from backend.plugin.code_generator.schema.column import CreateGenModelParam, GetGenModelDetail, UpdateGenModelParam
12+
from backend.plugin.code_generator.service.column_service import gen_model_service
1313

1414
router = APIRouter()
1515

backend/plugin/code_generator/crud/crud_gen_business.py renamed to backend/plugin/code_generator/crud/crud_business.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from sqlalchemy_crud_plus import CRUDPlus
77

88
from backend.plugin.code_generator.model import GenBusiness
9-
from backend.plugin.code_generator.schema.gen_business import CreateGenBusinessParam, UpdateGenBusinessParam
9+
from backend.plugin.code_generator.schema.business import CreateGenBusinessParam, UpdateGenBusinessParam
1010

1111

1212
class CRUDGenBusiness(CRUDPlus[GenBusiness]):

backend/plugin/code_generator/crud/crud_gen_model.py renamed to backend/plugin/code_generator/crud/crud_column.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@
55
from sqlalchemy.ext.asyncio import AsyncSession
66
from sqlalchemy_crud_plus import CRUDPlus
77

8-
from backend.plugin.code_generator.model import GenModel
9-
from backend.plugin.code_generator.schema.gen_model import CreateGenModelParam, UpdateGenModelParam
8+
from backend.plugin.code_generator.model import GenColumn
9+
from backend.plugin.code_generator.schema.column import CreateGenModelParam, UpdateGenModelParam
1010

1111

12-
class CRUDGenModel(CRUDPlus[GenModel]):
12+
class CRUDGenModel(CRUDPlus[GenColumn]):
1313
"""代码生成模型 CRUD 类"""
1414

15-
async def get(self, db: AsyncSession, pk: int) -> GenModel | None:
15+
async def get(self, db: AsyncSession, pk: int) -> GenColumn | None:
1616
"""
1717
获取代码生成模型列
1818
@@ -22,7 +22,7 @@ async def get(self, db: AsyncSession, pk: int) -> GenModel | None:
2222
"""
2323
return await self.select_model(db, pk)
2424

25-
async def get_all_by_business(self, db: AsyncSession, business_id: int) -> Sequence[GenModel]:
25+
async def get_all_by_business(self, db: AsyncSession, business_id: int) -> Sequence[GenColumn]:
2626
"""
2727
获取所有代码生成模型列
2828
@@ -66,4 +66,4 @@ async def delete(self, db: AsyncSession, pk: int) -> int:
6666
return await self.delete_model(db, pk)
6767

6868

69-
gen_model_dao: CRUDGenModel = CRUDGenModel(GenModel)
69+
gen_model_dao: CRUDGenModel = CRUDGenModel(GenColumn)
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
#!/usr/bin/env python3
22
# -*- coding: utf-8 -*-
3-
from backend.plugin.code_generator.model.gen_business import GenBusiness
4-
from backend.plugin.code_generator.model.gen_model import GenModel
3+
from backend.plugin.code_generator.model.business import GenBusiness
4+
from backend.plugin.code_generator.model.column import GenColumn

backend/plugin/code_generator/model/gen_business.py renamed to backend/plugin/code_generator/model/business.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@
1010
from backend.common.model import Base, id_key
1111

1212
if TYPE_CHECKING:
13-
from backend.plugin.code_generator.model import GenModel
13+
from backend.plugin.code_generator.model import GenColumn
1414

1515

1616
class GenBusiness(Base):
1717
"""代码生成业务表"""
1818

19-
__tablename__ = 'sys_gen_business'
19+
__tablename__ = 'gen_business'
2020

2121
id: Mapped[id_key] = mapped_column(init=False)
2222
app_name: Mapped[str] = mapped_column(String(50), comment='应用名称(英文)')
@@ -26,11 +26,12 @@ class GenBusiness(Base):
2626
table_comment: Mapped[str | None] = mapped_column(String(255), default=None, comment='表描述')
2727
# relate_model_fk: Mapped[int | None] = mapped_column(default=None, comment='关联表外键')
2828
schema_name: Mapped[str | None] = mapped_column(String(255), default=None, comment='Schema 名称 (默认为英文表名称)')
29+
filename: Mapped[str | None] = mapped_column(String(20), default=None, comment='基础文件名(默认为英文表名称)')
2930
default_datetime_column: Mapped[bool] = mapped_column(default=True, comment='是否存在默认时间列')
3031
api_version: Mapped[str] = mapped_column(String(20), default='v1', comment='代码生成 api 版本,默认为 v1')
3132
gen_path: Mapped[str | None] = mapped_column(String(255), default=None, comment='代码生成路径(默认为 app 根路径)')
3233
remark: Mapped[str | None] = mapped_column(
3334
LONGTEXT().with_variant(TEXT, 'postgresql'), default=None, comment='备注'
3435
)
3536
# 代码生成业务模型一对多
36-
gen_model: Mapped[list['GenModel']] = relationship(init=False, back_populates='gen_business')
37+
gen_column: Mapped[list['GenColumn']] = relationship(init=False, back_populates='gen_business')

backend/plugin/code_generator/model/gen_model.py renamed to backend/plugin/code_generator/model/column.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,15 @@
1313
from backend.plugin.code_generator.model import GenBusiness
1414

1515

16-
class GenModel(DataClassBase):
17-
"""代码生成模型表"""
16+
class GenColumn(DataClassBase):
17+
"""代码生成模型列表"""
1818

19-
__tablename__ = 'sys_gen_model'
19+
__tablename__ = 'gen_column'
2020

2121
id: Mapped[id_key] = mapped_column(init=False)
2222
name: Mapped[str] = mapped_column(String(50), comment='列名称')
2323
comment: Mapped[str | None] = mapped_column(String(255), default=None, comment='列描述')
24-
type: Mapped[str] = mapped_column(String(20), default='str', comment='SQLA 模型列类型')
24+
type: Mapped[str] = mapped_column(String(20), default='String', comment='SQLA 模型列类型')
2525
pd_type: Mapped[str] = mapped_column(String(20), default='str', comment='列类型对应的 pydantic 类型')
2626
default: Mapped[str | None] = mapped_column(
2727
LONGTEXT().with_variant(TEXT, 'postgresql'), default=None, comment='列默认值'
@@ -33,6 +33,6 @@ class GenModel(DataClassBase):
3333

3434
# 代码生成业务模型一对多
3535
gen_business_id: Mapped[int] = mapped_column(
36-
ForeignKey('sys_gen_business.id', ondelete='CASCADE'), default=0, comment='代码生成业务ID'
36+
ForeignKey('gen_business.id', ondelete='CASCADE'), default=0, comment='代码生成业务ID'
3737
)
38-
gen_business: Mapped[Union['GenBusiness', None]] = relationship(init=False, back_populates='gen_model')
38+
gen_business: Mapped[Union['GenBusiness', None]] = relationship(init=False, back_populates='gen_column')

backend/plugin/code_generator/schema/gen_business.py renamed to backend/plugin/code_generator/schema/business.py

+2-9
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@
22
# -*- coding: utf-8 -*-
33
from datetime import datetime
44

5-
from pydantic import ConfigDict, Field, model_validator
6-
from typing_extensions import Self
5+
from pydantic import ConfigDict, Field
76

87
from backend.common.schema import SchemaBase
98

@@ -17,18 +16,12 @@ class GenBusinessSchemaBase(SchemaBase):
1716
table_simple_name_zh: str = Field(description='表名称(中文简称)')
1817
table_comment: str | None = Field(None, description='表描述')
1918
schema_name: str | None = Field(None, description='Schema 名称 (默认为英文表名称)')
19+
filename: str | None = Field(None, description='基础文件名(默认为英文表名称)')
2020
default_datetime_column: bool = Field(True, description='是否存在默认时间列')
2121
api_version: str = Field('v1', description='代码生成 api 版本')
2222
gen_path: str | None = Field(None, description='代码生成路径(默认为 app 根路径)')
2323
remark: str | None = Field(None, description='备注')
2424

25-
@model_validator(mode='after')
26-
def check_schema_name(self) -> Self:
27-
"""检查并设置 schema 名称"""
28-
if self.schema_name is None:
29-
self.schema_name = self.table_name_en
30-
return self
31-
3225

3326
class CreateGenBusinessParam(GenBusinessSchemaBase):
3427
"""创建代码生成业务参数"""

backend/plugin/code_generator/service/gen_business_service.py renamed to backend/plugin/code_generator/service/business_service.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44

55
from backend.common.exception import errors
66
from backend.database.db import async_db_session
7-
from backend.plugin.code_generator.crud.crud_gen_business import gen_business_dao
7+
from backend.plugin.code_generator.crud.crud_business import gen_business_dao
88
from backend.plugin.code_generator.model import GenBusiness
9-
from backend.plugin.code_generator.schema.gen_business import CreateGenBusinessParam, UpdateGenBusinessParam
9+
from backend.plugin.code_generator.schema.business import CreateGenBusinessParam, UpdateGenBusinessParam
1010

1111

1212
class GenBusinessService:

backend/plugin/code_generator/service/gen_model_service.py renamed to backend/plugin/code_generator/service/column_service.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,18 @@
44

55
from backend.common.exception import errors
66
from backend.database.db import async_db_session
7-
from backend.plugin.code_generator.crud.crud_gen_model import gen_model_dao
7+
from backend.plugin.code_generator.crud.crud_column import gen_model_dao
88
from backend.plugin.code_generator.enums import GenModelMySQLColumnType
9-
from backend.plugin.code_generator.model import GenModel
10-
from backend.plugin.code_generator.schema.gen_model import CreateGenModelParam, UpdateGenModelParam
9+
from backend.plugin.code_generator.model import GenColumn
10+
from backend.plugin.code_generator.schema.column import CreateGenModelParam, UpdateGenModelParam
1111
from backend.plugin.code_generator.utils.type_conversion import sql_type_to_pydantic
1212

1313

1414
class GenModelService:
1515
"""代码生成模型服务类"""
1616

1717
@staticmethod
18-
async def get(*, pk: int) -> GenModel:
18+
async def get(*, pk: int) -> GenColumn:
1919
"""
2020
获取指定 ID 的模型
2121
@@ -36,7 +36,7 @@ async def get_types() -> list[str]:
3636
return types
3737

3838
@staticmethod
39-
async def get_by_business(*, business_id: int) -> Sequence[GenModel]:
39+
async def get_by_business(*, business_id: int) -> Sequence[GenColumn]:
4040
"""
4141
获取指定业务的所有模型
4242

backend/plugin/code_generator/service/gen_service.py

+32-25
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import zipfile
66

77
from pathlib import Path
8+
from typing import Sequence
89

910
import aiofiles
1011

@@ -13,14 +14,14 @@
1314
from backend.common.exception import errors
1415
from backend.core.path_conf import BASE_PATH
1516
from backend.database.db import async_db_session
17+
from backend.plugin.code_generator.crud.crud_business import gen_business_dao
18+
from backend.plugin.code_generator.crud.crud_column import gen_model_dao
1619
from backend.plugin.code_generator.crud.crud_gen import gen_dao
17-
from backend.plugin.code_generator.crud.crud_gen_business import gen_business_dao
18-
from backend.plugin.code_generator.crud.crud_gen_model import gen_model_dao
1920
from backend.plugin.code_generator.model import GenBusiness
21+
from backend.plugin.code_generator.schema.business import CreateGenBusinessParam
22+
from backend.plugin.code_generator.schema.column import CreateGenModelParam
2023
from backend.plugin.code_generator.schema.gen import ImportParam
21-
from backend.plugin.code_generator.schema.gen_business import CreateGenBusinessParam
22-
from backend.plugin.code_generator.schema.gen_model import CreateGenModelParam
23-
from backend.plugin.code_generator.service.gen_model_service import gen_model_service
24+
from backend.plugin.code_generator.service.column_service import gen_model_service
2425
from backend.plugin.code_generator.utils.gen_template import gen_template
2526
from backend.plugin.code_generator.utils.type_conversion import sql_type_to_pydantic
2627

@@ -29,7 +30,7 @@ class GenService:
2930
"""代码生成服务类"""
3031

3132
@staticmethod
32-
async def get_tables(*, table_schema: str) -> list[str]:
33+
async def get_tables(*, table_schema: str) -> Sequence[str]:
3334
"""
3435
获取指定 schema 下的所有表名
3536
@@ -57,32 +58,38 @@ async def import_business_and_model(*, obj: ImportParam) -> None:
5758
raise errors.ForbiddenError(msg='已存在相同数据库表业务')
5859

5960
table_name = table_info[0]
60-
business_data = {
61-
'app_name': obj.app,
62-
'table_name_en': table_name,
63-
'table_name_zh': table_info[1] or ' '.join(table_name.split('_')),
64-
'table_simple_name_zh': table_info[1] or table_name.split('_')[-1],
65-
'table_comment': table_info[1],
66-
}
67-
new_business = GenBusiness(**CreateGenBusinessParam(**business_data).model_dump())
61+
new_business = GenBusiness(
62+
**CreateGenBusinessParam(
63+
app_name=obj.app,
64+
table_name_en=table_name,
65+
table_name_zh=table_info[1] or ' '.join(table_name.split('_')),
66+
table_simple_name_zh=table_info[1] or table_name.split('_')[-1],
67+
table_comment=table_info[1],
68+
schema_name=table_name,
69+
filename=table_name,
70+
).model_dump()
71+
)
6872
db.add(new_business)
6973
await db.flush()
7074

7175
column_info = await gen_dao.get_all_columns(db, obj.table_schema, table_name)
7276
for column in column_info:
7377
column_type = column[-1].split('(')[0].upper()
7478
pd_type = sql_type_to_pydantic(column_type)
75-
model_data = {
76-
'name': column[0],
77-
'comment': column[-2],
78-
'type': column_type,
79-
'sort': column[-3],
80-
'length': column[-1].split('(')[1][:-1] if pd_type == 'str' and '(' in column[-1] else 0,
81-
'is_pk': column[1],
82-
'is_nullable': column[2],
83-
'gen_business_id': new_business.id,
84-
}
85-
await gen_model_dao.create(db, CreateGenModelParam(**model_data), pd_type=pd_type)
79+
await gen_model_dao.create(
80+
db,
81+
CreateGenModelParam(
82+
name=column[0],
83+
comment=column[-2],
84+
type=column_type,
85+
sort=column[-3],
86+
length=column[-1].split('(')[1][:-1] if pd_type == 'str' and '(' in column[-1] else 0,
87+
is_pk=column[1],
88+
is_nullable=column[2],
89+
gen_business_id=new_business.id,
90+
),
91+
pd_type=pd_type,
92+
)
8693

8794
@staticmethod
8895
async def render_tpl_code(*, business: GenBusiness) -> dict[str, str]:

backend/plugin/code_generator/utils/gen_template.py

+8-8
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from pydantic.alias_generators import to_pascal, to_snake
77

88
from backend.core.conf import settings
9-
from backend.plugin.code_generator.model import GenBusiness, GenModel
9+
from backend.plugin.code_generator.model import GenBusiness, GenColumn
1010
from backend.plugin.code_generator.path_conf import JINJA2_TEMPLATE_DIR
1111

1212

@@ -56,13 +56,13 @@ def get_code_gen_paths(business: GenBusiness) -> list[str]:
5656
:return:
5757
"""
5858
app_name = business.app_name
59-
module_name = business.table_name_en
59+
filename = business.filename
6060
return [
61-
f'{app_name}/api/{business.api_version}/{module_name}.py',
62-
f'{app_name}/crud/crud_{module_name}.py',
63-
f'{app_name}/model/{module_name}.py',
64-
f'{app_name}/schema/{module_name}.py',
65-
f'{app_name}/service/{module_name}_service.py',
61+
f'{app_name}/api/{business.api_version}/{filename}.py',
62+
f'{app_name}/crud/crud_{filename}.py',
63+
f'{app_name}/model/{filename}.py',
64+
f'{app_name}/schema/{filename}.py',
65+
f'{app_name}/service/{filename}_service.py',
6666
]
6767

6868
def get_code_gen_path(self, tpl_path: str, business: GenBusiness) -> str:
@@ -78,7 +78,7 @@ def get_code_gen_path(self, tpl_path: str, business: GenBusiness) -> str:
7878
return code_gen_path_mapping[tpl_path]
7979

8080
@staticmethod
81-
def get_vars(business: GenBusiness, models: Sequence[GenModel]) -> dict[str, str | Sequence[GenModel]]:
81+
def get_vars(business: GenBusiness, models: Sequence[GenColumn]) -> dict[str, str | Sequence[GenColumn]]:
8282
"""
8383
获取模板变量
8484

0 commit comments

Comments
 (0)