Files
wo_chovy/api/employment_api.py
2026-09-21 19:49:26 +08:00

131 lines
3.6 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# path: api/employment_api.py
# time:2026年9月12日14:18
# title:就业管理 接口
# author:周兴
# info:负责调用employment的dao文件里面增删改查逻辑
from fastapi import APIRouter, Depends, HTTPException, Query
from sqlalchemy.orm import Session
from database import get_db # 把数据库会话获取函数导入API层,让接口可以通过依赖注入获得数据库连接
from dao.employment_dao import (
create_employment,
search_employments,
update_employment,
delete_employment,
check_student_exists,
check_employment_exists
)
from schema.employment_schema import (
EmploymentCreate,
EmploymentUpdate,
EmploymentResponse
)
# 创建就业管理子路由
router = APIRouter()
# 新增就业信息
@router.post("/addEmployment", response_model=EmploymentResponse,summary="新增就业信息")
async def add_employment(
employment_data: EmploymentCreate,
db: Session = Depends(get_db)
):
# 1、先检查学生是否存在
student = check_student_exists(
db=db,
student_id=employment_data.student_id
)
# 如果学生不存在
if student is None:
raise HTTPException(
status_code=404,
detail="该学生不存在"
)
# 2、检查该学生是否已经存在就业信息
existing_employment = check_employment_exists(
db=db,
student_id=employment_data.student_id
)
if existing_employment is not None:
raise HTTPException(
status_code=409,
detail="该学生已经存在就业信息"
)
# 3、如果学生存在,再新增就业信息
try:
employment = create_employment(db, employment_data)
except ValueError as error:
raise HTTPException(status_code=422, detail=str(error)) from None
return employment
# 查询就业信息
@router.get("/getEmployments", response_model=list[EmploymentResponse],summary="查询就业信息")
async def get_employments(
student_id: int | None = Query(default=None),
company_name: str | None = Query(default=None),
min_salary: float | None = Query(default=None, ge=0),
max_salary: float | None = Query(default=None, ge=0),
db: Session = Depends(get_db)
):
employment_list = search_employments(
db=db,
student_id=student_id,
company_name=company_name,
min_salary=min_salary,
max_salary=max_salary
)
return employment_list
# 修改就业信息
@router.put("/modifyEmployment/{student_id}", response_model=EmploymentResponse,summary="修改就业信息")
async def modify_employment(
student_id: int,
employment_data: EmploymentUpdate,
db: Session = Depends(get_db)
):
try:
employment = update_employment(db=db, student_id=student_id, employment_data=employment_data)
except ValueError as error:
raise HTTPException(status_code=422, detail=str(error)) from None
if employment is None:
raise HTTPException(
status_code=404,
detail="该学生的就业信息不存在"
)
return employment
# 逻辑删除就业信息
@router.delete("/removeEmployment/{student_id}",summary="逻辑删除就业信息")
async def remove_employment(
student_id: int,
db: Session = Depends(get_db)
):
employment = delete_employment(
db=db,
student_id=student_id
)
if employment is None:
raise HTTPException(
status_code=404,
detail="该学生的就业信息不存在"
)
return {
"message": "就业信息删除成功"
}