108 lines
5.1 KiB
Python
108 lines
5.1 KiB
Python
# api/employ_api.py
|
|
# 本文件定义 学生就业信息 的所有 API 路由(Controller 层)
|
|
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.delete('/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
|