from fastapi import APIRouter, Depends, HTTPException, Query from sqlalchemy.orm import Session from core.database import get_db from dao.employment import (create_employment, get_employment_by_id, get_employment_by_student_id, get_employment_list, update_employment, delete_employment_logic) from schemas.employment import (EmploymentCreate, EmploymentUpdate, EmploymentResponse) employment_router = APIRouter( tags=["就业管理模块"]) @employment_router.post("/", response_model=EmploymentResponse, summary="新增就业信息") def add_employment(body: EmploymentCreate, db: Session = Depends(get_db)): """ 新增就业信息 - 一个学生只能保存一条就业记录 - student_id必须在学生表student_info_detail中真实存在 """ res = create_employment(db, body) if res is None: raise HTTPException(status_code=500, detail="新增失败,学生id不存在或该学生已有就业记录") 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("/", summary="就业信息列表,支持筛选") def query_employment_list(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="偏移量"), limit: int = Query(20, ge=1, le=100, description="每页条数"), db: Session = Depends(get_db)): # 调用dao列表查询,拿到数据字典列表和总条数 data_list, total = get_employment_list(db, company_name, salary_min, salary_max, skip, limit) 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.put("/{eid}", response_model=EmploymentResponse, summary="修改就业信息") def edit_employment(eid: int, body: EmploymentUpdate, db: Session = Depends(get_db)): """修改就业记录,只传想要修改的字段即可""" res = update_employment(db, eid, body) if res is None: raise HTTPException(status_code=404, detail="修改失败,记录不存在") return res @employment_router.delete("/{eid}", summary="逻辑删除就业记录") def logic_delete_employment(eid: int, db: Session = Depends(get_db)): """执行逻辑删除,is_deleted置1,不会真正删除数据库行""" ok = delete_employment_logic(db, eid) if not ok: raise HTTPException(status_code=404, detail="删除失败,记录不存在") # 删除成功返回提示字典 return {"code": 200, "msg": "逻辑删除成功"}