Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
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
19 changes: 11 additions & 8 deletions backend/app/api/v1/module_application/ai/crud.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-

from typing import Dict, List, Optional, Sequence
from typing import Dict, List, Optional, Sequence, Union, Any

from app.core.base_crud import CRUDBase
from app.api.v1.module_system.auth.schema import AuthSchema
Expand All @@ -21,42 +21,45 @@ def __init__(self, auth: AuthSchema) -> None:
self.auth = auth
super().__init__(model=McpModel, auth=auth)

async def get_by_id_crud(self, id: int) -> Optional[McpModel]:
async def get_by_id_crud(self, id: int, preload: Optional[List[Union[str, Any]]] = None) -> Optional[McpModel]:
"""
获取MCP服务器详情

参数:
- id (int): MCP服务器ID
- preload (Optional[List[Union[str, Any]]]): 预加载关系,未提供时使用模型默认项

返回:
- Optional[McpModel]: MCP服务器模型实例(如果存在)
"""
return await self.get(id=id)
return await self.get(id=id, preload=preload)

async def get_by_name_crud(self, name: str) -> Optional[McpModel]:
async def get_by_name_crud(self, name: str, preload: Optional[List[Union[str, Any]]] = None) -> Optional[McpModel]:
"""
通过名称获取MCP服务器

参数:
- name (str): MCP服务器名称
- preload (Optional[List[Union[str, Any]]]): 预加载关系,未提供时使用模型默认项

返回:
- Optional[McpModel]: MCP服务器模型实例(如果存在)
"""
return await self.get(name=name)
return await self.get(name=name, preload=preload)

async def get_list_crud(self, search: Optional[Dict] = None, order_by: Optional[List[Dict[str, str]]] = None) -> Sequence[McpModel]:
async def get_list_crud(self, search: Optional[Dict] = None, order_by: Optional[List[Dict[str, str]]] = None, preload: Optional[List[Union[str, Any]]] = None) -> Sequence[McpModel]:
"""
列表查询MCP服务器

参数:
- search (Optional[Dict]): 查询参数字典
- order_by (Optional[List[Dict[str, str]]]): 排序参数列表
- preload (Optional[List[Union[str, Any]]]): 预加载关系,未提供时使用模型默认项

返回:
- Sequence[McpModel]: MCP服务器模型实例序列
"""
return await self.list(search=search or {}, order_by=order_by or [{'id': 'asc'}])
return await self.list(search=search or {}, order_by=order_by or [{'id': 'asc'}], preload=preload)

async def create_crud(self, data: McpCreateSchema) -> Optional[McpModel]:
"""
Expand Down Expand Up @@ -93,4 +96,4 @@ async def delete_crud(self, ids: List[int]) -> None:
返回:
- None
"""
return await self.delete(ids=ids)
return await self.delete(ids=ids)
1 change: 1 addition & 0 deletions backend/app/api/v1/module_application/ai/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ class McpModel(CreatorMixin):

__tablename__ = 'app_ai_mcp'
__table_args__ = ({'comment': 'MCP 服务器表'})
__loader_options__ = ["creator"]

name: Mapped[str] = mapped_column(String(50), unique=True, comment='MCP 名称')
type: Mapped[int] = mapped_column(Integer, default=0, comment='MCP 类型(0:stdio 1:sse)')
Expand Down
22 changes: 13 additions & 9 deletions backend/app/api/v1/module_application/job/crud.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-

from typing import Dict, List, Optional, Sequence
from typing import Dict, List, Optional, Sequence, Union, Any

from app.core.base_crud import CRUDBase
from app.api.v1.module_system.auth.schema import AuthSchema
Expand All @@ -21,30 +21,32 @@ def __init__(self, auth: AuthSchema) -> None:
self.auth = auth
super().__init__(model=JobModel, auth=auth)

async def get_obj_by_id_crud(self, id: int) -> Optional[JobModel]:
async def get_obj_by_id_crud(self, id: int, preload: Optional[List[Union[str, Any]]] = None) -> Optional[JobModel]:
"""
获取定时任务详情

参数:
- id (int): 定时任务ID
- preload (Optional[List[Union[str, Any]]]): 预加载关系,未提供时使用模型默认项

返回:
- Optional[JobModel]: 定时任务模型,如果不存在则为None
"""
return await self.get(id=id)
return await self.get(id=id, preload=preload)

async def get_obj_list_crud(self, search: Optional[Dict] = None, order_by: Optional[List[Dict[str, str]]] = None) -> Sequence[JobModel]:
async def get_obj_list_crud(self, search: Optional[Dict] = None, order_by: Optional[List[Dict[str, str]]] = None, preload: Optional[List[Union[str, Any]]] = None) -> Sequence[JobModel]:
"""
获取定时任务列表

参数:
- search (Optional[Dict]): 查询参数字典
- order_by (Optional[List[Dict[str, str]]]): 排序参数列表
- preload (Optional[List[Union[str, Any]]]): 预加载关系,未提供时使用模型默认项

返回:
- Sequence[JobModel]: 定时任务模型序列
"""
return await self.list(search=search, order_by=order_by)
return await self.list(search=search, order_by=order_by, preload=preload)

async def create_obj_crud(self, data: JobCreateSchema) -> Optional[JobModel]:
"""
Expand Down Expand Up @@ -113,30 +115,32 @@ def __init__(self, auth: AuthSchema) -> None:
self.auth = auth
super().__init__(model=JobLogModel, auth=auth)

async def get_obj_log_by_id_crud(self, id: int) -> Optional[JobLogModel]:
async def get_obj_log_by_id_crud(self, id: int, preload: Optional[List[Union[str, Any]]] = None) -> Optional[JobLogModel]:
"""
获取定时任务日志详情

参数:
- id (int): 定时任务日志ID
- preload (Optional[List[Union[str, Any]]]): 预加载关系,未提供时使用模型默认项

返回:
- Optional[JobLogModel]: 定时任务日志模型,如果不存在则为None
"""
return await self.get(id=id)
return await self.get(id=id, preload=preload)

async def get_obj_log_list_crud(self, search: Optional[Dict] = None, order_by: Optional[List[Dict[str, str]]] = None) -> Sequence[JobLogModel]:
async def get_obj_log_list_crud(self, search: Optional[Dict] = None, order_by: Optional[List[Dict[str, str]]] = None, preload: Optional[List[Union[str, Any]]] = None) -> Sequence[JobLogModel]:
"""
获取定时任务日志列表

参数:
- search (Optional[Dict]): 查询参数字典
- order_by (Optional[List[Dict[str, str]]]): 排序参数列表
- preload (Optional[List[Union[str, Any]]]): 预加载关系,未提供时使用模型默认项

返回:
- Sequence[JobLogModel]: 定时任务日志模型序列
"""
return await self.list(search=search, order_by=order_by)
return await self.list(search=search, order_by=order_by, preload=preload)

async def delete_obj_log_crud(self, ids: List[int]) -> None:
"""
Expand Down
4 changes: 3 additions & 1 deletion backend/app/api/v1/module_application/job/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ class JobModel(CreatorMixin):
"""
__tablename__ = 'app_job'
__table_args__ = ({'comment': '定时任务调度表'})
__loader_options__ = ["job_logs", "creator"]

name: Mapped[Optional[str]] = mapped_column(String(64), nullable=True, default='', comment='任务名称')
jobstore: Mapped[Optional[str]] = mapped_column(String(64), nullable=True, default='default', comment='存储器')
Expand All @@ -37,6 +38,7 @@ class JobLogModel(MappedBase):
"""
__tablename__ = 'app_job_log'
__table_args__ = ({'comment': '定时任务调度日志表'})
__loader_options__ = ["job"]

id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True, comment='主键ID')
job_name: Mapped[str] = mapped_column(String(64),nullable=False,comment='任务名称')
Expand All @@ -52,4 +54,4 @@ class JobLogModel(MappedBase):
status: Mapped[bool] = mapped_column(Boolean(), default=True, nullable=False, comment="是否启用(True:启用 False:禁用)")
create_time: Mapped[Optional[datetime]] = mapped_column(DateTime, nullable=True, default=datetime.now, comment='创建时间')
# 任务关联关系
job: Mapped[Optional["JobModel"]] = relationship(back_populates="job_logs", lazy="selectin")
job: Mapped[Optional["JobModel"]] = relationship(back_populates="job_logs", lazy="selectin")
4 changes: 2 additions & 2 deletions backend/app/api/v1/module_application/job/schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,10 @@ class JobLogCreateSchema(BaseModel):
class JobLogUpdateSchema(JobLogCreateSchema):
"""定时任务调度日志表更新模型"""
...
job_log_id: Optional[int] = Field(default=None, description='任务日志ID')
id: Optional[int] = Field(default=None, description='任务日志ID')


class JobLogOutSchema(JobLogCreateSchema):
class JobLogOutSchema(JobLogUpdateSchema):
"""定时任务调度日志表响应模型"""
model_config = ConfigDict(from_attributes=True)
...
12 changes: 7 additions & 5 deletions backend/app/api/v1/module_application/myapp/crud.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-

from typing import Dict, List, Optional, Sequence
from typing import Dict, List, Optional, Sequence, Union, Any

from app.core.base_crud import CRUDBase
from app.api.v1.module_system.auth.schema import AuthSchema
Expand All @@ -21,30 +21,32 @@ def __init__(self, auth: AuthSchema) -> None:
self.auth = auth
super().__init__(model=ApplicationModel, auth=auth)

async def get_by_id_crud(self, id: int) -> Optional[ApplicationModel]:
async def get_by_id_crud(self, id: int, preload: Optional[List[Union[str, Any]]] = None) -> Optional[ApplicationModel]:
"""
根据id获取应用详情

参数:
- id (int): 应用ID
- preload (Optional[List[Union[str, Any]]]): 预加载关系,未提供时使用模型默认项

返回:
- Optional[ApplicationModel]: 应用详情,如果不存在则为None
"""
return await self.get(id=id)
return await self.get(id=id, preload=preload)

async def list_crud(self, search: Optional[Dict] = None, order_by: Optional[List[Dict[str, str]]] = None) -> Sequence[ApplicationModel]:
async def list_crud(self, search: Optional[Dict] = None, order_by: Optional[List[Dict[str, str]]] = None, preload: Optional[List[Union[str, Any]]] = None) -> Sequence[ApplicationModel]:
"""
列表查询应用

参数:
- search (Optional[Dict]): 查询参数,默认None
- order_by (Optional[List[Dict[str, str]]]): 排序参数,默认None
- preload (Optional[List[Union[str, Any]]]): 预加载关系,未提供时使用模型默认项

返回:
- Sequence[ApplicationModel]: 应用列表
"""
return await self.list(search=search, order_by=order_by)
return await self.list(search=search, order_by=order_by, preload=preload)

async def create_crud(self, data: ApplicationCreateSchema) -> Optional[ApplicationModel]:
"""
Expand Down
4 changes: 2 additions & 2 deletions backend/app/api/v1/module_application/myapp/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ class ApplicationModel(CreatorMixin):

__tablename__ = 'app_myapp'
__table_args__ = ({'comment': '应用系统表'})
__loader_options__ = ["creator"]

# 基本信息(必备字段)
name: Mapped[str] = mapped_column(String(64), nullable=False, comment='应用名称', unique=True)
Expand All @@ -24,5 +25,4 @@ class ApplicationModel(CreatorMixin):
access_url: Mapped[str] = mapped_column(String(500), nullable=False, comment='访问地址')

# 外观展示
icon_url: Mapped[str] = mapped_column(String(300), nullable=True, comment='应用图标URL')

icon_url: Mapped[str] = mapped_column(String(300), nullable=True, comment='应用图标URL')
11 changes: 8 additions & 3 deletions backend/app/api/v1/module_generator/demo/controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import urllib.parse

from app.common.response import StreamResponse, SuccessResponse
from app.common.request import PaginationService
from app.utils.common_util import bytes2file_response
from app.core.base_params import PaginationQueryParam
from app.core.dependencies import AuthPermission
Expand Down Expand Up @@ -59,8 +58,14 @@ async def get_obj_list_controller(
返回:
- JSONResponse: 包含示例列表分页信息的JSON响应
"""
result_dict_list = await DemoService.list_service(auth=auth, search=search, order_by=page.order_by)
result_dict = await PaginationService.paginate(data_list=result_dict_list, page_no=page.page_no, page_size=page.page_size)
# 使用数据库分页而不是应用层分页
result_dict = await DemoService.page_service(
auth=auth,
page_no=page.page_no if page.page_no is not None else 1,
page_size=page.page_size if page.page_size is not None else 10,
search=search,
order_by=page.order_by
)
logger.info("查询示例列表成功")
return SuccessResponse(data=result_dict, msg="查询示例列表成功")

Expand Down
42 changes: 35 additions & 7 deletions backend/app/api/v1/module_generator/demo/crud.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
# -*- coding: utf-8 -*-

from typing import Dict, List, Optional, Sequence
from typing import Dict, List, Optional, Sequence, Union, Any

from app.core.base_crud import CRUDBase
from app.api.v1.module_system.auth.schema import AuthSchema
from .model import DemoModel
from .schema import DemoCreateSchema, DemoUpdateSchema
from .schema import DemoCreateSchema, DemoUpdateSchema, DemoOutSchema


class DemoCRUD(CRUDBase[DemoModel, DemoCreateSchema, DemoUpdateSchema]):
Expand All @@ -20,30 +20,32 @@ def __init__(self, auth: AuthSchema) -> None:
"""
super().__init__(model=DemoModel, auth=auth)

async def get_by_id_crud(self, id: int) -> Optional[DemoModel]:
async def get_by_id_crud(self, id: int, preload: Optional[List[Union[str, Any]]] = None) -> Optional[DemoModel]:
"""
详情

参数:
- id (int): 示例ID
- preload (Optional[List[Union[str, Any]]]): 预加载关系,未提供时使用模型默认项

返回:
- Optional[DemoModel]: 示例模型实例或None
"""
return await self.get(id=id)
return await self.get(id=id, preload=preload)

async def list_crud(self, search: Optional[Dict] = None, order_by: Optional[List[Dict[str, str]]] = None) -> Sequence[DemoModel]:
async def list_crud(self, search: Optional[Dict] = None, order_by: Optional[List[Dict[str, str]]] = None, preload: Optional[List[Union[str, Any]]] = None) -> Sequence[DemoModel]:
"""
列表查询

参数:
- search (Optional[Dict]): 查询参数
- order_by (Optional[List[Dict[str, str]]]): 排序参数
- preload (Optional[List[Union[str, Any]]]): 预加载关系,未提供时使用模型默认项

返回:
- Sequence[DemoModel]: 示例模型实例序列
"""
return await self.list(search=search, order_by=order_by)
return await self.list(search=search, order_by=order_by, preload=preload)

async def create_crud(self, data: DemoCreateSchema) -> Optional[DemoModel]:
"""
Expand Down Expand Up @@ -93,4 +95,30 @@ async def set_available_crud(self, ids: List[int], status: bool) -> None:
返回:
- None
"""
return await self.set(ids=ids, status=status)
return await self.set(ids=ids, status=status)

async def page_crud(self, offset: int, limit: int, order_by: Optional[List[Dict[str, str]]] = None, search: Optional[Dict] = None, preload: Optional[List[Union[str, Any]]] = None) -> Dict:
"""
分页查询

参数:
- offset (int): 偏移量
- limit (int): 每页数量
- order_by (Optional[List[Dict[str, str]]]): 排序参数
- search (Optional[Dict]): 查询参数
- preload (Optional[List[Union[str, Any]]]): 预加载关系,未提供时使用模型默认项

返回:
- Dict: 分页数据
"""
order_by_list = order_by or [{'id': 'asc'}]
search_dict = search or {}

return await self.page(
offset=offset,
limit=limit,
order_by=order_by_list,
search=search_dict,
out_schema=DemoOutSchema,
preload=preload
)
3 changes: 2 additions & 1 deletion backend/app/api/v1/module_generator/demo/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ class DemoModel(CreatorMixin):
"""
__tablename__ = 'gen_demo'
__table_args__ = ({'comment': '示例表'})
__loader_options__ = ["creator"]

name: Mapped[Optional[str]] = mapped_column(String(64), nullable=True, default='', comment='名称')
status: Mapped[bool] = mapped_column(Boolean(), default=True, nullable=False, comment="是否启用(True:启用 False:禁用)")
status: Mapped[bool] = mapped_column(Boolean(), default=True, nullable=False, comment="是否启用(True:启用 False:禁用)")
Loading