claude_sms_test
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
# dao/advisor_dao.py
|
||||
# 顾问信息数据访问层
|
||||
|
||||
from typing import List, Optional, Tuple
|
||||
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from dao.exceptions import ConflictError, NotFoundError
|
||||
from dao.pagination import paginate
|
||||
from model.advisor_model import AdvisorInfo
|
||||
|
||||
|
||||
def assert_advisor_alive(db: Session, adv_id: str, detail: Optional[str] = None) -> AdvisorInfo:
|
||||
"""
|
||||
确认顾问存在且未删除,否则抛 NotFoundError。
|
||||
供学生模块复用作外键校验。
|
||||
"""
|
||||
advisor = db.query(AdvisorInfo).filter(AdvisorInfo.id == adv_id, AdvisorInfo.is_deleted == 0).first()
|
||||
if not advisor:
|
||||
raise NotFoundError(detail or f"顾问 {adv_id} 不存在")
|
||||
return advisor
|
||||
|
||||
|
||||
def list_advisors(
|
||||
db: Session,
|
||||
page: int,
|
||||
size: int,
|
||||
name: Optional[str] = None,
|
||||
) -> Tuple[int, List[AdvisorInfo]]:
|
||||
"""分页查询顾问,支持按姓名模糊查询。"""
|
||||
query = db.query(AdvisorInfo).filter(AdvisorInfo.is_deleted == 0)
|
||||
if name:
|
||||
query = query.filter(AdvisorInfo.name.like(f"%{name}%"))
|
||||
return paginate(query, page, size, order_by=AdvisorInfo.id)
|
||||
|
||||
|
||||
def create_advisor(db: Session, data: dict) -> AdvisorInfo:
|
||||
"""新增顾问:校验编号唯一(主键,含已删除记录)。"""
|
||||
if db.query(AdvisorInfo).filter(AdvisorInfo.id == data["id"]).first():
|
||||
raise ConflictError("顾问编号已存在")
|
||||
|
||||
advisor = AdvisorInfo(**data)
|
||||
db.add(advisor)
|
||||
db.commit()
|
||||
db.refresh(advisor)
|
||||
return advisor
|
||||
|
||||
|
||||
def update_advisor(db: Session, adv_id: str, data: dict) -> AdvisorInfo:
|
||||
"""更新顾问信息。"""
|
||||
advisor = assert_advisor_alive(db, adv_id, "顾问不存在或已删除")
|
||||
|
||||
for field, value in data.items():
|
||||
setattr(advisor, field, value)
|
||||
|
||||
db.commit()
|
||||
db.refresh(advisor)
|
||||
return advisor
|
||||
|
||||
|
||||
def soft_delete_advisor(db: Session, adv_id: str) -> None:
|
||||
"""软删除顾问。"""
|
||||
advisor = assert_advisor_alive(db, adv_id, "顾问不存在或已删除")
|
||||
advisor.is_deleted = 1
|
||||
db.commit()
|
||||
Reference in New Issue
Block a user