83 lines
2.2 KiB
Python
83 lines
2.2 KiB
Python
from models.consultant import Consultant
|
||
from schemas.consultant import ConsultantCreate, ConsultantUpdate
|
||
from sqlalchemy.orm import Session
|
||
def create_consultant(db:Session, obj_in: ConsultantCreate):
|
||
try:
|
||
db_obj = Consultant(**obj_in.model_dump())
|
||
db.add(db_obj)
|
||
except:
|
||
db.rollback()
|
||
return False
|
||
else:
|
||
db.commit()
|
||
return db_obj
|
||
# 查询全部可分页(过滤已删除)
|
||
def get_consultant_list(
|
||
db: Session,
|
||
page: int = 1,
|
||
page_size: int = 20,
|
||
name: str | None = None,
|
||
phone: str | None = None
|
||
):
|
||
page_size = max(1, min(page_size, 100))
|
||
skip = (page - 1) * page_size
|
||
|
||
query = db.query(Consultant).filter(Consultant.is_deleted == 0)
|
||
# 有传参数才追加过滤条件
|
||
if name:
|
||
query = query.filter(Consultant.consultant_name.like(f"%{name}%"))
|
||
if phone:
|
||
query = query.filter(Consultant.phone.like(f"%{phone}%"))
|
||
|
||
total = query.count()
|
||
items = query.offset(skip).limit(page_size).all()
|
||
|
||
return {
|
||
"items": items,
|
||
"total": total,
|
||
"page": page,
|
||
"page_size": page_size
|
||
}
|
||
|
||
|
||
|
||
# 根据id查单条
|
||
def get_consultant_by_id(db:Session, cid: int):
|
||
return db.query(Consultant).filter(Consultant.id == cid, Consultant.is_deleted == 0 ).first()
|
||
|
||
|
||
# 修改
|
||
def update_consultant(db: Session, cid: int, update_data: dict):
|
||
try:
|
||
db_obj = db.query(Consultant).filter(
|
||
Consultant.id == cid,
|
||
Consultant.is_deleted == 0
|
||
).first()
|
||
if not db_obj:
|
||
return None
|
||
# 循环赋值
|
||
for k, v in update_data.items():
|
||
setattr(db_obj, k, v)
|
||
db.commit()
|
||
db.refresh(db_obj) # 刷新从数据库拿最新数据(updated_at)
|
||
return db_obj
|
||
except Exception:
|
||
db.rollback()
|
||
return None
|
||
|
||
|
||
|
||
# 逻辑删除(只改is_deleted=1)
|
||
def delete_consultant(db:Session, cid: int):
|
||
try:
|
||
db_obj = get_consultant_by_id(db, cid)
|
||
if not db_obj:
|
||
return None
|
||
db_obj.is_deleted = 1
|
||
except:
|
||
db.rollback()
|
||
return None
|
||
else:
|
||
db.commit()
|
||
return db_obj
|