Files
max_code_test_gitea_2/api/employ_api.py
T
2026-09-14 11:51:13 +08:00

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