mirror of
https://github.com/fastapiadmin/FastapiAdmin.git
synced 2026-09-21 20:55:14 +00:00
refactor(api): 统一更新接口使用路径参数传递ID
refactor(backend): 重构CRUD基类查询方法去除重复结果 feat(application): 新增应用系统模块基础结构 fix(backend): 修复多处日志记录ID变量名错误 style(backend): 清理无用代码和注释 fix(frontend): 修复用户导入功能参数错误 docs(backend): 更新环境配置示例注释 perf(backend): 优化导出功能数据处理逻辑 test(frontend): 添加任务日志功能开发中提示 chore: 更新角色菜单权限数据
This commit is contained in:
@@ -64,13 +64,14 @@ async def create_type_controller(
|
||||
logger.info(f"创建字典类型成功: {result_dict}")
|
||||
return SuccessResponse(data=result_dict, msg="创建字典类型成功")
|
||||
|
||||
@DictRouter.put("/type/update", summary="修改字典类型", description="修改字典类型")
|
||||
@DictRouter.put("/type/update/{id}", summary="修改字典类型", description="修改字典类型")
|
||||
async def update_type_controller(
|
||||
data: DictTypeUpdateSchema,
|
||||
redis: Redis = Depends(redis_getter),
|
||||
id: int = Path(..., description="字典类型ID"),
|
||||
auth: AuthSchema = Depends(AuthPermission(permissions=["system:dict_type:update"]))
|
||||
) -> JSONResponse:
|
||||
result_dict = await DictTypeService.update_obj_service(auth=auth, redis=redis, data=data)
|
||||
result_dict = await DictTypeService.update_obj_service(auth=auth, redis=redis, id=id, data=data)
|
||||
logger.info(f"修改字典类型成功: {result_dict}")
|
||||
return SuccessResponse(data=result_dict, msg="修改字典类型成功")
|
||||
|
||||
@@ -81,7 +82,7 @@ async def delete_type_controller(
|
||||
auth: AuthSchema = Depends(AuthPermission(permissions=["system:dict_type:delete"]))
|
||||
) -> JSONResponse:
|
||||
await DictTypeService.delete_obj_service(auth=auth, redis=redis, ids=ids)
|
||||
logger.info(f"删除字典类型成功: {id}")
|
||||
logger.info(f"删除字典类型成功: {ids}")
|
||||
return SuccessResponse(msg="删除字典类型成功")
|
||||
|
||||
@DictRouter.patch("/type/available/setting", summary="批量修改公告状态", description="批量修改公告状态")
|
||||
@@ -141,13 +142,14 @@ async def create_data_controller(
|
||||
logger.info(f"创建字典数据成功: {result_dict}")
|
||||
return SuccessResponse(data=result_dict, msg="创建字典数据成功")
|
||||
|
||||
@DictRouter.put("/data/update", summary="修改字典数据", description="修改字典数据")
|
||||
@DictRouter.put("/data/update/{id}", summary="修改字典数据", description="修改字典数据")
|
||||
async def update_data_controller(
|
||||
data: DictDataUpdateSchema,
|
||||
redis: Redis = Depends(redis_getter),
|
||||
id: int = Path(..., description="字典数据ID"),
|
||||
auth: AuthSchema = Depends(AuthPermission(permissions=["system:dict_data:update"]))
|
||||
) -> JSONResponse:
|
||||
result_dict = await DictDataService.update_obj_service(auth=auth, redis=redis, data=data)
|
||||
result_dict = await DictDataService.update_obj_service(auth=auth, redis=redis, id=id, data=data)
|
||||
logger.info(f"修改字典数据成功: {result_dict}")
|
||||
return SuccessResponse(data=result_dict, msg="修改字典数据成功")
|
||||
|
||||
@@ -158,7 +160,7 @@ async def delete_data_controller(
|
||||
auth: AuthSchema = Depends(AuthPermission(permissions=["system:dict_data:delete"]))
|
||||
) -> JSONResponse:
|
||||
await DictDataService.delete_obj_service(auth=auth, redis=redis, ids=ids)
|
||||
logger.info(f"删除字典数据成功: {id}")
|
||||
logger.info(f"删除字典数据成功: {ids}")
|
||||
return SuccessResponse(msg="删除字典数据成功")
|
||||
|
||||
@DictRouter.patch("/data/available/setting", summary="批量修改字典数据状态", description="批量修改字典数据状态")
|
||||
|
||||
@@ -33,7 +33,7 @@ class DictTypeCreateSchema(BaseModel):
|
||||
|
||||
class DictTypeUpdateSchema(DictTypeCreateSchema):
|
||||
"""字典类型更新模型"""
|
||||
id: int = Field(..., gt=0, description="字典类型ID")
|
||||
...
|
||||
|
||||
|
||||
class DictTypeOutSchema(DictTypeCreateSchema, BaseSchema):
|
||||
@@ -76,7 +76,7 @@ class DictDataCreateSchema(BaseModel):
|
||||
|
||||
class DictDataUpdateSchema(DictDataCreateSchema):
|
||||
"""字典数据更新模型"""
|
||||
id: int = Field(..., gt=0, description="字典数据ID")
|
||||
...
|
||||
|
||||
|
||||
class DictDataOutSchema(DictDataCreateSchema, BaseSchema):
|
||||
|
||||
@@ -62,8 +62,8 @@ class DictTypeService:
|
||||
return new_obj_dict
|
||||
|
||||
@classmethod
|
||||
async def update_obj_service(cls, auth: AuthSchema, redis: Redis, data: DictTypeUpdateSchema) -> Dict:
|
||||
exist_obj = await DictTypeCRUD(auth).get_obj_by_id_crud(id=data.id)
|
||||
async def update_obj_service(cls, auth: AuthSchema, redis: Redis, id:int, data: DictTypeUpdateSchema) -> Dict:
|
||||
exist_obj = await DictTypeCRUD(auth).get_obj_by_id_crud(id=id)
|
||||
if not exist_obj:
|
||||
raise CustomException(msg='更新失败,该数据字典类型不存在')
|
||||
if exist_obj.dict_name != data.dict_name:
|
||||
@@ -93,7 +93,7 @@ class DictTypeService:
|
||||
obj = await DictDataCRUD(auth).update_obj_crud(id=item.id, data=dict_data)
|
||||
dict_data_list.append(DictDataOutSchema.model_validate(obj).model_dump())
|
||||
|
||||
obj = await DictTypeCRUD(auth).update_obj_crud(id=data.id, data=data)
|
||||
obj = await DictTypeCRUD(auth).update_obj_crud(id=id, data=data)
|
||||
|
||||
new_obj_dict = DictTypeOutSchema.model_validate(obj).model_dump()
|
||||
|
||||
@@ -164,7 +164,7 @@ class DictTypeService:
|
||||
item['status'] = '正常' if item.get('status') else '停用'
|
||||
item['creator'] = item.get('creator', {}).get('name', '未知') if isinstance(item.get('creator'), dict) else '未知'
|
||||
|
||||
return ExcelUtil.export_list2excel(list_data=data_list, mapping_dict=mapping_dict)
|
||||
return ExcelUtil.export_list2excel(list_data=data, mapping_dict=mapping_dict)
|
||||
|
||||
|
||||
class DictDataService:
|
||||
@@ -250,12 +250,12 @@ class DictDataService:
|
||||
return DictDataOutSchema.model_validate(obj).model_dump()
|
||||
|
||||
@classmethod
|
||||
async def update_obj_service(cls, auth: AuthSchema, redis: Redis, data: DictDataUpdateSchema) -> Dict:
|
||||
exist_obj = await DictDataCRUD(auth).get_obj_by_id_crud(id=data.id)
|
||||
async def update_obj_service(cls, auth: AuthSchema, redis: Redis, id:int, data: DictDataUpdateSchema) -> Dict:
|
||||
exist_obj = await DictDataCRUD(auth).get_obj_by_id_crud(id=id)
|
||||
if not exist_obj:
|
||||
raise CustomException(msg='更新失败,该字典数据不存在')
|
||||
exist_obj = await DictDataCRUD(auth).get(dict_label=data.dict_label)
|
||||
if exist_obj and exist_obj.id != data.id:
|
||||
if exist_obj and exist_obj.id != id:
|
||||
raise CustomException(msg='更新失败,数据字典数据重复')
|
||||
|
||||
# 如果状态变更,需要同步更新字典类型状态并刷新缓存
|
||||
@@ -283,7 +283,7 @@ class DictDataService:
|
||||
except Exception as e:
|
||||
logger.error(f"更新字典数据状态时刷新缓存失败: {e}")
|
||||
|
||||
obj = await DictDataCRUD(auth).update_obj_crud(id=data.id, data=data)
|
||||
obj = await DictDataCRUD(auth).update_obj_crud(id=id, data=data)
|
||||
redis_key = f"{RedisInitKeyConfig.SYSTEM_DICT.key}:{data.dict_type}"
|
||||
try:
|
||||
# 获取当前字典类型的所有字典数据
|
||||
@@ -304,6 +304,8 @@ class DictDataService:
|
||||
|
||||
@classmethod
|
||||
async def delete_obj_service(cls, auth: AuthSchema, redis: Redis, ids: list[int]) -> None:
|
||||
if len(ids) < 1:
|
||||
raise CustomException(msg='删除失败,删除对象不能为空')
|
||||
|
||||
for id in ids:
|
||||
|
||||
@@ -354,4 +356,4 @@ class DictDataService:
|
||||
item['is_default'] = '是' if item.get('is_default') else '否'
|
||||
item['creator'] = item.get('creator', {}).get('name', '未知') if isinstance(item.get('creator'), dict) else '未知'
|
||||
|
||||
return ExcelUtil.export_list2excel(list_data=data_list, mapping_dict=mapping_dict)
|
||||
return ExcelUtil.export_list2excel(list_data=data, mapping_dict=mapping_dict)
|
||||
Reference in New Issue
Block a user