certflow.controllers.caliber_mapping_controller 源代码

"""口径映射控制器

桥接口径映射管理界面(View)与口径映射服务(Service):读操作直接委托
CaliberMappingService;写操作在此统一提交事务,失败时回滚并向上抛出。模型类
经服务层间接引用,控制器不直接依赖 ``certflow.models.*``。

架构层次:View (CaliberMappingManagerView) → Controller (CaliberMappingController)
         → Service (CaliberMappingService) → Model (CaliberMapping)
"""

from __future__ import annotations

from pathlib import Path
from typing import Any

from certflow.controllers.base_controller import BaseController
from certflow.services.caliber_mapping_service import (
    CaliberMapping,
    CaliberMappingService,
)


[文档] class CaliberMappingController(BaseController): """口径映射控制器 — 管理界面的业务调度层""" def __init__(self, db_session=None, db_manager=None, use_shared: bool = True): """初始化控制器 Args: db_session: 外部会话(可选);不传则按 BaseController 规则自动创建 db_manager: 数据库管理器(可选) use_shared: 是否使用全局共享管理器 """ super().__init__(db_session=db_session, db_manager=db_manager, use_shared=use_shared) self._service = self.get_service(CaliberMappingService)
[文档] def list_all(self) -> list[CaliberMapping]: """返回全部口径映射记录(按 id 升序) Returns: list[CaliberMapping]: 口径映射记录列表 """ return self._service.list_all()
[文档] def get_by_id(self, mapping_id: int) -> CaliberMapping | None: """按主键获取记录 Args: mapping_id: 记录主键 Returns: CaliberMapping | None: 匹配的记录;不存在时返回 None """ return self._service.get_by_id(mapping_id)
[文档] def create(self, data: dict[str, Any]) -> int: """新增记录并提交 Returns: int: 新记录主键 id """ obj = self._service.create(data) self.commit() return obj.id
[文档] def update(self, mapping_id: int, data: dict[str, Any]) -> bool: """更新记录并提交 Args: mapping_id: 记录主键 data: 待更新的字段字典 Returns: bool: 是否更新成功(id 不存在返回 False) """ obj = self._service.update(mapping_id, data) if obj is None: return False self.commit() return True
[文档] def delete(self, mapping_id: int) -> bool: """删除记录并提交 Returns: bool: 是否删除成功 """ if not self._service.delete(mapping_id): return False self.commit() return True
[文档] def seed_common_calibers(self) -> int: """幂等灌入常见口径映射示例,库非空则跳过(不破坏已有数据)""" count = self._service.seed_common_calibers() if count: self.commit() return count
[文档] def export_csv(self, path: str | Path) -> int: """把当前 caliber_mappings 表整表导出为 CSV 快照,返回行数。""" return self._service.export_csv(path)
[文档] def import_csv(self, path: str | Path) -> dict[str, int]: """把 CSV 快照 upsert 回 caliber_mappings 表,返回统计。""" return self._service.import_csv(path)