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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user