diff --git a/api/employment.py b/api/employment.py index f0d112f..63fd9ff 100644 --- a/api/employment.py +++ b/api/employment.py @@ -6,7 +6,8 @@ from dao.employment import (create_employment, get_employment_by_student_id, get_employment_list, update_employment, - delete_employment_logic) + delete_employment_logic, + recover_employment_delete) from schemas.employment import (EmploymentCreate, EmploymentUpdate, @@ -28,17 +29,21 @@ def add_employment(body: EmploymentCreate, db: Session = Depends(get_db)): return res -@employment_router.get("/students/{student_id}", response_model=EmploymentResponse, summary="查询指定学生的就业信息") -def query_student_employment(student_id: int, db: Session = Depends(get_db)): - """根据学生id获取对应就业记录""" - record = get_employment_by_student_id(db, student_id) - if not record: - raise HTTPException(status_code=404, detail="未找到该学生的就业信息") - return record +# + +# @employment_router.get("/students/{student_id}", response_model=EmploymentResponse, summary="查询指定学生的就业信息") +# def query_student_employment(student_id: int, db: Session = Depends(get_db)): +# """根据学生id获取对应就业记录""" +# record = get_employment_by_student_id(db, student_id) +# if not record: +# raise HTTPException(status_code=404, detail="未找到该学生的就业信息") +# return record @employment_router.get("/", summary="就业信息列表,支持筛选") -def query_employment_list(company_name: str | None = Query(None, description="公司名称模糊查询"), +def query_employment_list(eid:int| None = Query(None, description="就业编号"), + student_id:int| None = Query(None,description="学生id"), + company_name: str | None = Query(None, description="公司名称模糊查询"), salary_min: float | None = Query(None, description="最低薪资"), salary_max: float | None = Query(None, description="最高薪资"), skip: int = Query(0, ge=0, description="偏移量"), @@ -49,13 +54,13 @@ def query_employment_list(company_name: str | None = Query(None, description=" return {"total": total, "data": data_list} -@employment_router.get("/{eid}", response_model=EmploymentResponse, summary="根据id查询就业详情") -def query_employment_detail(eid: int, db: Session = Depends(get_db)): - """根据就业主键id查询单条就业记录""" - record = get_employment_by_id(db, eid) - if not record: - raise HTTPException(status_code=404, detail="就业记录不存在或已被逻辑删除") - return record +# @employment_router.get("/{eid}", response_model=EmploymentResponse, summary="根据id查询就业详情") +# def query_employment_detail(eid: int, db: Session = Depends(get_db)): +# """根据就业主键id查询单条就业记录""" +# record = get_employment_by_id(db, eid) +# if not record: +# raise HTTPException(status_code=404, detail="就业记录不存在或已被逻辑删除") +# return record @employment_router.put("/{eid}", response_model=EmploymentResponse, summary="修改就业信息") @@ -75,3 +80,12 @@ def logic_delete_employment(eid: int, db: Session = Depends(get_db)): raise HTTPException(status_code=404, detail="删除失败,记录不存在") # 删除成功返回提示字典 return {"code": 200, "msg": "逻辑删除成功"} + +@employment_router.get("/{eid}", summary="回档逻辑删除就业记录") +def recover_delete_employment(eid: int, db: Session = Depends(get_db)): + """执行逻辑删除,is_deleted置1,不会真正删除数据库行""" + ok = recover_employment_delete(db, eid) + if not ok: + raise HTTPException(status_code=404, detail="回档失败,记录已经存在") + # 删除成功返回提示字典 + return {"code": 200, "msg": "回档成功"} \ No newline at end of file diff --git a/dao/employment.py b/dao/employment.py index 7261d86..1fc4e47 100644 --- a/dao/employment.py +++ b/dao/employment.py @@ -1,13 +1,12 @@ -from sqlalchemy.orm import Session from models.employment import Employment -from schemas.employment import EmploymentCreate, EmploymentUpdate, EmploymentResponse +from schemas.employment import EmploymentResponse -def create_employment(db, obj_in): +def create_employment(db, e): # obj_in是Pydantic对象(EmploymentCreate) """新增就业信息:一个学生只能存在一条就业记录""" try: - db_obj = Employment(**obj_in.model_dump()) + db_obj = Employment(**e.model_dump()) db.add(db_obj) db.commit() db.refresh(db_obj) @@ -75,10 +74,14 @@ def get_employment_by_student_id(db, student_id): return None -def get_employment_list(db, company_name=None, salary_min=None, salary_max=None, skip=0, limit=20): +def get_employment_list(db, id=None,student_id=None,company_name=None, salary_min=None, salary_max=None, skip=0, limit=20): """就业列表查询;支持公司名模糊、薪资范围筛选;只查询is_deleted=0""" try: query = db.query(Employment).filter(Employment.is_deleted == 0) + if id is not None: + query = query.filter(Employment.id >= id) + if student_id is not None: + query = query.filter(Employment.student_id >= student_id) if company_name: query = query.filter(Employment.company_name.like(f"%{company_name}%")) if salary_min is not None: @@ -108,48 +111,62 @@ def get_employment_list(db, company_name=None, salary_min=None, salary_max=None, return [], 0 -def update_employment(db, eid, obj_in): +def update_employment(db, eid, e): """修改就业信息,只更新传入的字段""" try: - db_obj_raw = db.query(Employment).filter(Employment.id == eid + x = db.query(Employment).filter(Employment.id == eid ,Employment.is_deleted == 0).first() - if db_obj_raw is None: + if x is None: return None - update_dict = obj_in.model_dump(exclude_unset=True) + update_dict = e.model_dump(exclude_unset=True) db.query(Employment).filter(Employment.id == eid ,Employment.is_deleted == 0).update(update_dict) db.commit() - db.refresh(db_obj_raw) + db.refresh(x) - resp = EmploymentResponse(id=db_obj_raw.id - ,student_id=db_obj_raw.student_id - ,employment_status=db_obj_raw.employment_status - ,employment_open_date=db_obj_raw.employment_open_date - ,offer_date=db_obj_raw.offer_date - ,company_name=db_obj_raw.company_name - ,salary=db_obj_raw.salary - ,remark=db_obj_raw.remark - ,created_at=db_obj_raw.created_at - ,updated_at=db_obj_raw.updated_at) + resp = EmploymentResponse(id=x.id + ,student_id=x.student_id + ,employment_status=x.employment_status + ,employment_open_date=x.employment_open_date + ,offer_date=x.offer_date + ,company_name=x.company_name + ,salary=x.salary + ,remark=x.remark + ,created_at=x.created_at + ,updated_at=x.updated_at) return resp.model_dump() except Exception: db.rollback() - return None + return + def delete_employment_logic(db, eid): """逻辑删除,只修改is_deleted=1,不做物理删除""" try: - db_obj_raw = db.query(Employment).filter(Employment.id == eid + y = db.query(Employment).filter(Employment.id == eid ,Employment.is_deleted == 0).first() - if db_obj_raw is None: + if y is None: return False - db_obj_raw.is_deleted = 1 + y.is_deleted = 1 db.commit() return True except Exception: db.rollback() return False + +def recover_employment_delete(db, eid): + """逻辑删除,只修改is_deleted=1,不做物理删除""" + try: + y = db.query(Employment).filter(Employment.id == eid).first() + if y is None: + return False + y.is_deleted = 0 + db.commit() + return True + except Exception: + db.rollback() + return False \ No newline at end of file diff --git a/schemas/employment.py b/schemas/employment.py index d5fbb33..425e286 100644 --- a/schemas/employment.py +++ b/schemas/employment.py @@ -1,4 +1,4 @@ -from pydantic import BaseModel, Field,ConfigDict#专门存放模型配置参数的字典类。把各种开关配置放里面。 +from pydantic import BaseModel, Field from datetime import date, datetime from decimal import Decimal