# api/employ_api.py # 本文件定义 学生就业信息 的所有 API 路由(Controller 层) # author:王博 from typing import List from fastapi import APIRouter,HTTPException from fastapi.params import Depends from sqlalchemy.orm import Session from database import get_db from scheme.employ_scheme import EmployStatusCreate as EModel, EmployStatusResponse, EmployStatusQuery as QModel, \ EmployQueryResponse, EmployStatusDelete as DModel from dao.employ_dao import StudentEmployManageDAO as Emp # 创建路由器,前缀将在 main.py 中统一添加 router = APIRouter() # ---------- 登记学生就业信息 ---------- @router.post('/add_emp_reco',response_model=EmployStatusResponse,status_code=201, responses={404: {"description": "学生不存在"},405: {"description": "该学生就业记录已存在"}}) async def add_emp_reco(emp_sta:EModel,db:Session = Depends(get_db)): """ 登记学生就业信息 接口 :param emp_sta: 请求体参数,参考scheme.employ_scheme模块中定义的请求体模型 EmployStatusCreate :return:登记的学生就业信息 """ if Emp.is_in_stu(db, emp_sta): # 查询 请求体参数(模型) 的学生是否在学生信息表中存在,逻辑删除(不存在) if Emp.is_exist_visible(db,emp_sta): # 存在并可见 raise HTTPException(status_code=405, detail="该学生就业记录已存在") if Emp.is_exist_invisible(db,emp_sta): # 存在 不可见 Emp.recover_emp_info(db, emp_sta) # 恢复 ---> 可见 re = Emp.set_emp_info(db, emp_sta) # 修改 学生就业信息 if re: Emp.set_stu_state(db, emp_sta) # 设置 学生就业状态 return emp_sta # 学生就就业记录 不存在 直接登记 Emp.add_emp_reco(db, emp_sta) # 登记 学生就业信息 Emp.set_stu_state(db, emp_sta) # 设置 学生就业状态 return emp_sta else: # 学生 在学生信息表中 不可查 raise HTTPException(status_code = 404,detail = "学生不存在") # ---------- 修改学生就业信息 ---------- @router.put('/set_emp_reco',response_model=EmployStatusResponse, responses={404: {"description": "该学生就业记录不存在"}}) async def set_emp_reco(emp_sta:EModel,db:Session = Depends(get_db)): """ 修改学生就业信息 接口 """ if Emp.is_exist_visible(db,emp_sta): # 存在并可见 re = Emp.set_emp_info(db, emp_sta) # 修改 学生就业信息 if re: Emp.set_stu_state(db, emp_sta) # 设置 学生就业状态 return emp_sta raise HTTPException(status_code=404, detail="该学生就业记录不存在") # ---------- 逻辑删除学生就业信息 ---------- @router.delete('/delete_emp_reco/{emp_sta}',status_code=204, # response_model=EmployStatusResponse, responses={404: {"description": "该学生就业记录不存在"}}) async def delete_emp_reco(emp_sta:str,db:Session = Depends(get_db)): """ 逻辑删除 学生就业信息 接口 """ if Emp.is_exist_visible(db, emp_sta): # 存在并可见 re = Emp.del_emp_info(db, emp_sta) # 逻辑删除 成 不可见 if re: return None raise HTTPException(status_code=404, detail="该学生就业记录不存在") # ---------- 查询学生就业信息(多条件查询) ---------- @router.post('/query_emp_reco',response_model=EmployQueryResponse, responses={404: {"description": "该学生就业记录不存在"}}) async def query_emp_reco(emp_query:QModel,db:Session = Depends(get_db)): """ 查询 学生就业信息 接口 """ e_all,total = Emp.query_emp_info(db, emp_query) # 调用查询方法 if e_all: return {"employ_info":e_all,"total":total} # 查询结果e_all不为None,返回查询到的记录列表; total:总条数 return {"employ_info":None,"total":total} # ---------- 批量删除学生就业信息 ---------- @router.delete('/delete_emp_reco/batch/',status_code=204, # response_model=EmployStatusResponse, responses={404: {"description": "该学生就业记录不存在"}}) async def batch_delete_emp_reco(emp_sta:List[DModel],db:Session = Depends(get_db)): if Emp.is_exist_visible(db, emp_sta): # 存在并可见 re = Emp.del_emp_info(db, emp_sta) # 逻辑删除 成 不可见 if re: return None raise HTTPException(status_code=404, detail="该学生就业记录不存在") # ---------- 批量修改学生就业信息 ---------- @router.put('/set_emp_reco/batch/',status_code=204, # response_model=EmployStatusResponse, responses={404: {"description": "该学生就业记录不存在"}}) async def batch_set_emp_reco(emp_sta:List[EModel],db:Session = Depends(get_db)): """ 批量修改学生就业信息 接口 """ for i in emp_sta: if Emp.is_exist_visible(db, i): # 存在并可见 Emp.set_emp_info(db, i) # 修改 学生就业信息 Emp.set_stu_state(db, i) # 设置 学生就业状态 else: raise HTTPException(status_code=404, detail="该学生就业记录不存在") else: db.commit() return emp_sta