Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
refactor(common): 替换分页服务方法及代码生成模块重构
- 将分页服务中方法名由get_page_obj统一替换为paginate
- 注意相关controller均调整调用方式,保证统一接口调用
- 代码生成模块数据库模型统一替换为GenTableModel和GenTableColumnModel
- 更改数据库类型及分页相关配置为settings.DATABASE_TYPE统一管理
- 重构代码生成模块查询参数,新增GenTableQueryParam和GenTableColumnQueryParam类支持更灵活查询
- 数据模型中Pydantic Schema类型统一调整为Schema后缀
- 优化异常处理,增加请求参数验证错误的友好提示映射
- 调整中间件及依赖以支持更严格的类型检查及更健壮的用户权限认证逻辑
- 微调日志打印格式,改进请求日志信息输出风格
  • Loading branch information
zhangtao
zhangtao committed Sep 18, 2025
commit 81d131c0a487a1bd60b2260fd8171155358e0a9a
2 changes: 1 addition & 1 deletion backend/app/api/v1/module_application/myapp/controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ async def get_obj_list_controller(
auth: AuthSchema = Depends(AuthPermission(permissions=["application:myapp:query"]))
) -> JSONResponse:
result_dict_list = await ApplicationService.get_application_list_service(auth=auth, search=search, order_by=page.order_by)
result_dict = await PaginationService.get_page_obj(data_list=result_dict_list, page_no=page.page_no, page_size=page.page_size)
result_dict = await PaginationService.paginate(data_list=result_dict_list, page_no=page.page_no, page_size=page.page_size)
logger.info(f"查询应用列表成功")
return SuccessResponse(data=result_dict, msg="查询应用列表成功")

Expand Down
2 changes: 1 addition & 1 deletion backend/app/api/v1/module_example/demo/controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ async def get_obj_list_controller(
auth: AuthSchema = Depends(AuthPermission(permissions=["demo:example:query"]))
) -> JSONResponse:
result_dict_list = await DemoService.get_demo_list_service(auth=auth, search=search, order_by=page.order_by)
result_dict = await PaginationService.get_page_obj(data_list= result_dict_list, page_no= page.page_no, page_size = page.page_size)
result_dict = await PaginationService.paginate(data_list= result_dict_list, page_no= page.page_no, page_size = page.page_size)
logger.info(f"查询示例列表成功")
return SuccessResponse(data=result_dict, msg="查询公告列表成功")

Expand Down
70 changes: 35 additions & 35 deletions backend/app/api/v1/module_generator/gencode/crud.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,16 @@
from sqlglot.expressions import Expression
from typing import List

from .model import GenTable, GenTableColumn
from config.env import DataBaseConfig
from utils.page_util import PageUtil
from .model import GenTableModel, GenTableColumnModel
from app.config.setting import settings
from app.common.request import PaginationService
from .schema import (
GenTableBaseModel,
GenTableColumnBaseModel,
GenTableColumnModel,
GenTableModel,
GenTablePageQueryModel,
GenTableBaseSchema,
GenTableColumnBaseSchema,
GenTableColumnSchema,
GenTableSchema,
)
from .param import GenTableQueryParam, GenTableColumnBaseSchema


class GenTableDao:
Expand All @@ -36,7 +36,7 @@ async def get_gen_table_by_id(cls, db: AsyncSession, table_id: int):
gen_table_info = (
(
await db.execute(
select(GenTable).options(selectinload(GenTable.columns)).where(GenTable.table_id == table_id)
select(GenTableModel).options(selectinload(GenTableModel.columns)).where(GenTableModel.table_id == table_id)
)
)
.scalars()
Expand All @@ -57,7 +57,7 @@ async def get_gen_table_by_name(cls, db: AsyncSession, table_name: str):
gen_table_info = (
(
await db.execute(
select(GenTable).options(selectinload(GenTable.columns)).where(GenTable.table_name == table_name)
select(GenTableModel).options(selectinload(GenTableModel.columns)).where(GenTableModel.table_name == table_name)
)
)
.scalars()
Expand All @@ -74,7 +74,7 @@ async def get_gen_table_all(cls, db: AsyncSession):
:param db: orm对象
:return: 所有业务表信息
"""
gen_table_all = (await db.execute(select(GenTable).options(selectinload(GenTable.columns)))).scalars().all()
gen_table_all = (await db.execute(select(GenTableModel).options(selectinload(GenTableModel.columns)))).scalars().all()

return gen_table_all

Expand All @@ -88,11 +88,11 @@ async def create_table_by_sql_dao(cls, db: AsyncSession, sql_statements: List[Ex
:return:
"""
for sql_statement in sql_statements:
sql = sql_statement.sql(dialect=DataBaseConfig.sqlglot_parse_dialect)
sql = sql_statement.sql(dialect=settings.DATABASE_TYPE)
await db.execute(text(sql))

@classmethod
async def get_gen_table_list(cls, db: AsyncSession, query_object: GenTablePageQueryModel, is_page: bool = False):
async def get_gen_table_list(cls, db: AsyncSession, query_object: GenTableQueryParam, is_page: bool = False):
"""
根据查询参数获取代码生成业务表列表信息

Expand All @@ -102,16 +102,16 @@ async def get_gen_table_list(cls, db: AsyncSession, query_object: GenTablePageQu
:return: 代码生成业务表列表信息对象
"""
query = (
select(GenTable)
.options(selectinload(GenTable.columns))
select(GenTableModel)
.options(selectinload(GenTableModel.columns))
.where(
func.lower(GenTable.table_name).like(f'%{query_object.table_name.lower()}%')
func.lower(GenTableModel.table_name).like(f'%{query_object.table_name.lower()}%')
if query_object.table_name
else True,
func.lower(GenTable.table_comment).like(f'%{query_object.table_comment.lower()}%')
func.lower(GenTableModel.table_comment).like(f'%{query_object.table_comment.lower()}%')
if query_object.table_comment
else True,
GenTable.create_time.between(
GenTableModel.create_time.between(
datetime.combine(datetime.strptime(query_object.begin_time, '%Y-%m-%d'), time(00, 00, 00)),
datetime.combine(datetime.strptime(query_object.end_time, '%Y-%m-%d'), time(23, 59, 59)),
)
Expand All @@ -120,12 +120,12 @@ async def get_gen_table_list(cls, db: AsyncSession, query_object: GenTablePageQu
)
.distinct()
)
gen_table_list = await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page)
gen_table_list = await PaginationService.paginate(db, query, query_object.page_no, query_object.page_size, is_page)

return gen_table_list

@classmethod
async def get_gen_db_table_list(cls, db: AsyncSession, query_object: GenTablePageQueryModel, is_page: bool = False):
async def get_gen_db_table_list(cls, db: AsyncSession, query_object: GenTableQueryParam, is_page: bool = False):
"""
根据查询参数获取数据库列表信息

Expand All @@ -134,7 +134,7 @@ async def get_gen_db_table_list(cls, db: AsyncSession, query_object: GenTablePag
:param is_page: 是否开启分页
:return: 数据库列表信息对象
"""
if DataBaseConfig.db_type == 'postgresql':
if settings.DATABASE_TYPE == 'postgresql':
query_sql = """
table_name as table_name,
table_comment as table_comment,
Expand Down Expand Up @@ -166,12 +166,12 @@ async def get_gen_db_table_list(cls, db: AsyncSession, query_object: GenTablePag
if query_object.table_comment:
query_sql += """and lower(table_comment) like lower(concat('%', :table_comment, '%'))"""
if query_object.begin_time:
if DataBaseConfig.db_type == 'postgresql':
if settings.DATABASE_TYPE == 'postgresql':
query_sql += """and create_time::date >= to_date(:begin_time, 'yyyy-MM-dd')"""
else:
query_sql += """and date_format(create_time, '%Y%m%d') >= date_format(:begin_time, '%Y%m%d')"""
if query_object.end_time:
if DataBaseConfig.db_type == 'postgresql':
if settings.DATABASE_TYPE == 'postgresql':
query_sql += """and create_time::date <= to_date(:end_time, 'yyyy-MM-dd')"""
else:
query_sql += """and date_format(create_time, '%Y%m%d') >= date_format(:end_time, '%Y%m%d')"""
Expand All @@ -184,7 +184,7 @@ async def get_gen_db_table_list(cls, db: AsyncSession, query_object: GenTablePag
}
)
)
gen_db_table_list = await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page)
gen_db_table_list = await PaginationService.paginate(db, query, query_object.page_no, query_object.page_size, is_page)

return gen_db_table_list

Expand All @@ -197,7 +197,7 @@ async def get_gen_db_table_list_by_names(cls, db: AsyncSession, table_names: Lis
:param table_names: 业务表名称组
:return: 数据库列表信息对象
"""
if DataBaseConfig.db_type == 'postgresql':
if settings.DATABASE_TYPE == 'postgresql':
query_sql = """
select
table_name as table_name,
Expand Down Expand Up @@ -240,7 +240,7 @@ async def add_gen_table_dao(cls, db: AsyncSession, gen_table: GenTableModel):
:param gen_table: 业务表对象
:return:
"""
db_gen_table = GenTable(**GenTableBaseModel(**gen_table.model_dump(by_alias=True)).model_dump())
db_gen_table = GenTableModel(**GenTableBaseSchema(**gen_table.model_dump(by_alias=True)).model_dump())
db.add(db_gen_table)
await db.flush()

Expand All @@ -255,7 +255,7 @@ async def edit_gen_table_dao(cls, db: AsyncSession, gen_table: dict):
:param gen_table: 需要更新的业务表字典
:return:
"""
await db.execute(update(GenTable), [GenTableBaseModel(**gen_table).model_dump()])
await db.execute(update(GenTableModel), [GenTableBaseSchema(**gen_table).model_dump()])

@classmethod
async def delete_gen_table_dao(cls, db: AsyncSession, gen_table: GenTableModel):
Expand All @@ -266,7 +266,7 @@ async def delete_gen_table_dao(cls, db: AsyncSession, gen_table: GenTableModel):
:param gen_table: 业务表对象
:return:
"""
await db.execute(delete(GenTable).where(GenTable.table_id.in_([gen_table.table_id])))
await db.execute(delete(GenTableModel).where(GenTableModel.table_id.in_([gen_table.table_id])))


class GenTableColumnDao:
Expand All @@ -286,7 +286,7 @@ async def get_gen_table_column_list_by_table_id(cls, db: AsyncSession, table_id:
gen_table_column_list = (
(
await db.execute(
select(GenTableColumn).where(GenTableColumn.table_id == table_id).order_by(GenTableColumn.sort)
select(GenTableColumnModel).where(GenTableColumnModel.table_id == table_id).order_by(GenTableColumnModel.sort)
)
)
.scalars()
Expand All @@ -304,7 +304,7 @@ async def get_gen_db_table_columns_by_name(cls, db: AsyncSession, table_name: st
:param table_name: 业务表名称
:return: 业务表字段列表信息对象
"""
if DataBaseConfig.db_type == 'postgresql':
if settings.DATABASE_TYPE == 'postgresql':
query_sql = """
select
column_name, is_required, is_pk, sort, column_comment, is_increment, column_type
Expand Down Expand Up @@ -354,8 +354,8 @@ async def add_gen_table_column_dao(cls, db: AsyncSession, gen_table_column: GenT
:param gen_table_column: 岗位对象
:return:
"""
db_gen_table_column = GenTableColumn(
**GenTableColumnBaseModel(**gen_table_column.model_dump(by_alias=True)).model_dump()
db_gen_table_column = GenTableColumnModel(
**GenTableColumnBaseSchema(**gen_table_column.model_dump(by_alias=True)).model_dump()
)
db.add(db_gen_table_column)
await db.flush()
Expand All @@ -371,7 +371,7 @@ async def edit_gen_table_column_dao(cls, db: AsyncSession, gen_table_column: dic
:param gen_table_column: 需要更新的业务表字段字典
:return:
"""
await db.execute(update(GenTableColumn), [GenTableColumnBaseModel(**gen_table_column).model_dump()])
await db.execute(update(GenTableColumnModel), [GenTableColumnBaseSchema(**gen_table_column).model_dump()])

@classmethod
async def delete_gen_table_column_by_table_id_dao(cls, db: AsyncSession, gen_table_column: GenTableColumnModel):
Expand All @@ -382,7 +382,7 @@ async def delete_gen_table_column_by_table_id_dao(cls, db: AsyncSession, gen_tab
:param gen_table_column: 业务表字段对象
:return:
"""
await db.execute(delete(GenTableColumn).where(GenTableColumn.table_id.in_([gen_table_column.table_id])))
await db.execute(delete(GenTableColumnModel).where(GenTableColumnModel.table_id.in_([gen_table_column.table_id])))

@classmethod
async def delete_gen_table_column_by_column_id_dao(cls, db: AsyncSession, gen_table_column: GenTableColumnModel):
Expand All @@ -393,4 +393,4 @@ async def delete_gen_table_column_by_column_id_dao(cls, db: AsyncSession, gen_ta
:param post: 业务表字段对象
:return:
"""
await db.execute(delete(GenTableColumn).where(GenTableColumn.column_id.in_([gen_table_column.column_id])))
await db.execute(delete(GenTableColumnModel).where(GenTableColumnModel.column_id.in_([gen_table_column.column_id])))
1 change: 0 additions & 1 deletion backend/app/api/v1/module_generator/gencode/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ class GenTableColumnModel(CreatorMixin):
"""
代码生成业务表字段
"""

__tablename__ = 'gen_table_column'
__table_args__ = ({'comment': '代码生成业务表字段'})

Expand Down
74 changes: 59 additions & 15 deletions backend/app/api/v1/module_generator/gencode/param.py
Original file line number Diff line number Diff line change
@@ -1,20 +1,64 @@
# -*- coding:utf-8 -*-
# -*- coding: utf-8 -*-

@as_query
class GenTablePageQuerySchema(GenTableQuerySchema):
"""
代码生成业务表分页查询模型
"""
from datetime import datetime
from typing import Optional
from fastapi import Query

page_num: int = Field(default=1, description='当前页码')
page_size: int = Field(default=10, description='每页记录数')
from app.core.validator import DateTimeStr
from app.common.request import PageResultSchema
from .schema import GenTableBaseSchema, GenTableColumnBaseSchema


@as_query
class GenTableColumnPageQuerySchema(GenTableColumnQuerySchema):
"""
代码生成业务表字段分页查询模型
"""
class GenTableQueryParam(PageResultSchema, GenTableBaseSchema):
"""数据库表查询参数"""

def __init__(
self,
name: Optional[str] = Query(None, description="名称"),
status: Optional[bool] = Query(None, description="是否启用"),
creator: Optional[int] = Query(None, description="创建人"),
start_time: Optional[DateTimeStr] = Query(None, description="开始时间", example="2023-01-01 00:00:00"),
end_time: Optional[DateTimeStr] = Query(None, description="结束时间", example="2023-12-31 23:59:59"),
) -> None:
super().__init__()

# 模糊查询字段
self.name = ("like", name)

# 精确查询字段
self.creator_id = creator
self.status = status

# 时间范围查询
if start_time and end_time:
start_datetime = datetime.strptime(str(start_time), '%Y-%m-%d %H:%M:%S')
end_datetime = datetime.strptime(str(end_time), '%Y-%m-%d %H:%M:%S')
self.created_at = ("between", (start_datetime, end_datetime))


class GenTableColumnQueryParam(PageResultSchema, GenTableColumnBaseSchema):
"""数据库表字段查询参数"""

def __init__(
self,
name: Optional[str] = Query(None, description="名称"),
status: Optional[bool] = Query(None, description="是否启用"),
creator: Optional[int] = Query(None, description="创建人"),
start_time: Optional[DateTimeStr] = Query(None, description="开始时间", example="2023-01-01 00:00:00"),
end_time: Optional[DateTimeStr] = Query(None, description="结束时间", example="2023-12-31 23:59:59"),
) -> None:
super().__init__()

# 模糊查询字段
self.name = ("like", name)

# 精确查询字段
self.creator_id = creator
self.status = status

# 时间范围查询
if start_time and end_time:
start_datetime = datetime.strptime(str(start_time), '%Y-%m-%d %H:%M:%S')
end_datetime = datetime.strptime(str(end_time), '%Y-%m-%d %H:%M:%S')
self.created_at = ("between", (start_datetime, end_datetime))

page_num: int = Field(default=1, description='当前页码')
page_size: int = Field(default=10, description='每页记录数')
Loading