refactor(repo): 收敛 base_model 双轨,删除函数统一走 repo.batch_delete_r

- shared/base_repository.py 新增 batch_delete_r(返回 R,等价原 base_model 语义)
- 20 个模块删除函数从 Model.batch_delete_r 改为 x_repo.batch_delete_r
- shared/base_model.py 移除 classmethod(get_by_id/get_by_ids/get_all_active/exists/batch_delete_r),只留字段 + to_dict
- 清理 base_model 多余 imports
- 实测 dept 删除、批量删除及多模块读接口正常

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Claude
2026-08-07 11:28:25 +08:00
co-authored by Claude
parent 2cb71cc50d
commit ae2e141713
17 changed files with 46 additions and 99 deletions
+24 -1
View File
@@ -8,11 +8,11 @@
"""通用 Repository 基类:封装各模型的数据访问层公共操作。
各模块 repository.py 继承本类并提供自定义查询,service 通过 repository 访问数据库。
过渡期与 base_model 的 classmethod 双轨并存,全部模块迁移完成后收敛。
"""
from typing import Generic, Optional, TypeVar
from core import R
from core.database import get_db_session
from shared.constants import PAGE_SIZE
from utils.request import parse_id_list
@@ -132,6 +132,29 @@ class BaseRepository(Generic[M]):
setattr(record, self.soft_delete_col, 1)
return True
def batch_delete_r(self, ids_str) -> R:
"""
批量软删除并返回 R 对象(等价原 base_model.batch_delete_r)。
Args:
ids_str: 逗号分隔的ID字符串,如 "1,2,3"
Returns:
R: 操作结果(成功 code=0,失败 code=1)
"""
if not ids_str:
return R.failed("记录ID不存在")
id_list = parse_id_list(ids_str)
if not id_list:
return R.failed("记录ID不存在")
records = self.db.query(self.model).filter(
self.model.id.in_(id_list), self._soft_col() == 0).all()
if len(records) != len(id_list):
return R.failed("记录不存在")
for record in records:
setattr(record, self.soft_delete_col, 1)
return R.ok(msg="本次共删除{0}条数据".format(len(records)))
def hard_delete(self, obj) -> bool:
"""物理删除实例。"""
self.db.delete(obj)