Files
medical_training/apps/case/services/department_resolver.py
T

33 lines
1004 B
Python

from apps.user.models import Department
from config.exceptions import AppError
def resolve_department(department_name: str):
"""按名称解析科室,返回 Department 实例。
- 空/None → 返回 None(不强制)
- 精确匹配 1 条 → 返回该 Department
- 匹配 0 条 → 400 CASE_DEPARTMENT_NOT_FOUND
- 匹配多条 → 400 CASE_DEPARTMENT_AMBIGUOUS
"""
if not department_name:
return None
qs = Department.objects.filter(name=department_name)
count = qs.count()
if count == 0:
raise AppError(
'CASE_DEPARTMENT_NOT_FOUND',
f'科室 "{department_name}" 不存在',
status_code=400,
)
if count > 1:
raise AppError(
'CASE_DEPARTMENT_AMBIGUOUS',
f'科室 "{department_name}" 匹配到多条记录,请精确指定',
details={'matches': list(qs.values_list('name', flat=True))},
status_code=400,
)
return qs.first()