This commit is contained in:
Lys
2026-09-21 22:13:04 +08:00
commit 1e302df9ed
63 changed files with 1268 additions and 0 deletions
+60
View File
@@ -0,0 +1,60 @@
from fastapi import APIRouter,HTTPException,Depends
from sqlalchemy.orm import Session
from dao.class_dao import ClassDao
from database import get_db
from scheme.classes import ClassUpdate, ClassCreate, ClassResponse, ClassListResponse
router = APIRouter()
#新增
@router.post("/class/",response_model=ClassResponse)
async def create_class(data:ClassCreate,db: Session = Depends(get_db)):
if ClassDao.get_class(db, data.cid):
raise HTTPException(status_code=400, detail="班级编号已存在")
return ClassDao.create_class_list(db, data)
# 条件查询班级
@router.get("/class/get_list/",response_model=ClassListResponse)
async def get_class_list(
cid :int = None,
class_name: str = None,
headteacher:str = None,
page: int = 1,
size: int = 5,
db: Session = Depends(get_db)
):
total, items = ClassDao.get_class_list(db, cid=cid, class_name=class_name,headteacher=headteacher, page=page, size=size)
return {"total": total, "items": items}
# 查询单个班级
# @router.put("/class",response_model=ClassResponse)
# async def list_class(cid:int,db: Session = Depends(get_db)):
# cls = ClassDao.get_class(db,cid)
# if not cls:
# raise HTTPException(status_code=404, detail="班级不存在")
# return cls
# 更新
@router.put("/class/{cid}",response_model=ClassResponse)
async def update_class(cid:int,data:ClassUpdate,db: Session = Depends(get_db)):
cls = ClassDao.update_class(db, cid, data)
if not cls:
raise HTTPException(status_code=404, detail="班级不存在")
return cls
#删除
@router.delete("/class/{cid}")
async def delete_class(cid:int,db: Session = Depends(get_db)):
c = ClassDao.delete_class(db, cid)
if not c:
raise HTTPException(status_code=404, detail="班级不存在")
return None
+35
View File
@@ -0,0 +1,35 @@
# api/scores.py
# 本文件定义成绩相关的所有 API 路由
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from database import get_db
from dao.score_dao import ScoreDAO
from scheme.scores import ScoreUpdate, ScoreResponse
# 创建路由器,前缀将在 main.py 中统一添加
router = APIRouter()
# 根据 学号 + 考核次数 查询单条成绩
@router.get("/score/{sid}/{exam_num}", response_model=ScoreResponse)
async def get_score(
sid: int,
exam_num: int,
db: Session = Depends(get_db) # 依赖注入获得数据库会话
):
return ScoreDAO.get_by_id(db, sid, exam_num)
# 根据 学号 + 考核次数 修改成绩
@router.put("/score/update", response_model=ScoreResponse)
async def update_score(
sid: int,
exam_num: int,
score_data: ScoreUpdate,
db: Session = Depends(get_db)
):
return ScoreDAO.update(db, sid, exam_num, score_data)
# 删除成绩,逻辑删除flag改为0
@router.post("/score/delete", response_model=ScoreResponse)
async def delete_score(
sid: int,
exam_num: int,
db: Session = Depends(get_db)
):
return ScoreDAO.delete(db, sid, exam_num)
+80
View File
@@ -0,0 +1,80 @@
# statistic.py
# 本文件定义statistic相关的所有 API 路由(Controller 层)
from dao.statistic_dao import Statistic
from fastapi import APIRouter, Depends, HTTPException, Query
from database import get_db
router = APIRouter()
@router.get("/ages")
async def get_ages_interface(
age1:int = Query(...,ge=18,lt=30,description="输入年龄"),
age2:int|None = Query(default=None,ge=19,lt=30,description="如果要区间则输入最大年龄"),
condition:int =Query(...,description="输入比较条件:1是大于,2是小于,3是等于,4是区间"),
db = Depends(get_db)
):
module = Statistic(db)
res = module.get_ages(age1, age2, condition)
return {
"code": 200,
"data": res
}
@router.get("/class/")
async def get_class_interface(
db = Depends(get_db)
):
module = Statistic(db)
res = module.get_class()
return {
"code": 200,
"data": res
}
@router.get("/grades/")
async def get_grades_interface(
grades:float=Query(80,ge=0,lt=100,description="输入成绩"),
db = Depends(get_db)
):
module = Statistic(db)
res = module.get_grades(grades)
return res
@router.get("/bad_grades/")
async def get_bad_grades_interface(
number:int=Query(...,ge=0,lt=4,description="输入次数"),
db = Depends(get_db)
):
module = Statistic(db)
res = module.get_bad_grades(number)
return res
#
#
@router.get("/avg_grade")
async def get_avg_interface(
sort:int = Query(..., ge=1, le=2, description="1降序高分在前,2升序低分在前"),
db=Depends(get_db)
):
module = Statistic(db)
res = module.get_avg_grades(sort)
return {"code":200,"data":res}
#
@router.get("/top")
async def get_top_interface(
top:int=Query(...,description="输入排名"),
db = Depends(get_db)
):
module = Statistic(db)
res = module.get_top(top)
return res
#
#
@router.get("/get_time")
async def get_time_interface(db = Depends(get_db)):
module = Statistic(db)
res = module.get_time()
return res
+48
View File
@@ -0,0 +1,48 @@
# api/students.py
# 本文件定义学生模块的所有 API 路由(Controller 层)
from fastapi import APIRouter, Depends, HTTPException, Query
from sqlalchemy.orm import Session
from database import get_db
from dao.student_dao import StudentDAO
from scheme.students import StudentCreate, StudentUpdate, StudentResponse, StudentListResponse
# 创建路由器
router = APIRouter(prefix="/students", tags=["学生管理"])
# 查询学生列表(支持按编号、姓名、班级等条件筛选)
@router.get("/list/", response_model=StudentListResponse)
async def get_student_list(
sid: int = None,
name: str = Query(None,max_length=4,description='名字的模糊查询'),
cid: int =Query(None,description="根据学生的班级id查询"),
gender: str = Query(None,max_length=1,description="选择项(男\女)根据学生性别查询,查询男同学或者女同学"),
education: str = Query(None,max_length=2,description="选择项(硕士\本科)根据学生学历查询,查询该学历学生"),
page: int = Query(1,description="查看的页数"),
size: int = Query(5,description="查询每一页的数量"),
db: Session = Depends(get_db)
):
total, items = StudentDAO.get_list(db, sid=sid, name=name, cid=cid,
gender=gender, education=education,
page=page, size=size)
return {"total": total, "items": items}
# 按学号查单个学生
@router.get("/{sid}", response_model=StudentResponse)
async def get_student_by_id(sid: int, db: Session = Depends(get_db)):
return StudentDAO.get_by_id(db, sid)
# 按照用户输入新增学生
@router.post("/create", response_model=StudentResponse)
async def create_student(data: StudentCreate, db: Session = Depends(get_db)):
return StudentDAO.create(db, data)
# 更新学生信息
@router.put("/update/{sid}", response_model=StudentResponse)
async def update_student(sid: int, data: StudentUpdate, db: Session = Depends(get_db)):
return StudentDAO.update(db, sid, data)
# 删除学生
@router.post("/delete/{sid}", response_model=StudentResponse)
async def delete_student(sid: int, db: Session = Depends(get_db)):
return StudentDAO.delete(db, sid)
+46
View File
@@ -0,0 +1,46 @@
# api/teacher.py
# 本文件定义老师模块的所有 API 路由(Controller 层)
from fastapi import APIRouter, Depends, HTTPException,Query
from sqlalchemy.orm import Session
from database import get_db
from dao.teacher_dao import TeacherDAO
from scheme.teachers import TeacherCreate, TeacherUpdate, TeacherResponse, TeacherListResponse
# 创建路由器
router = APIRouter(prefix="/teachers", tags=["老师管理"])
#查询老师列表(支持按姓名模糊查询、是否班主任)
@router.get("/list/", response_model=TeacherListResponse)
async def get_teacher_list(
teacher_name: str = Query(None,),
is_headteacher: int = Query(default=None,ge=0,le=1),
page: int = 1,
size: int = 10,
db: Session = Depends(get_db)
):
total, items = TeacherDAO.get_list(db, teacher_name=teacher_name,
is_headteacher=is_headteacher,
page=page, size=size)
return {"total": total, "items": items}
#按老师编号查单个老师
@router.get("/{teacher_id}", response_model=TeacherResponse)
async def get_teacher_by_id(teacher_id: int, db: Session = Depends(get_db)):
return TeacherDAO.get_by_id(db, teacher_id)
# 新增老师
@router.post("/create", response_model=TeacherCreate)
async def create_teacher(data: TeacherCreate, db: Session = Depends(get_db)):
return TeacherDAO.create(db, data)
# 更新老师信息
@router.put("/update/{teacher_id}", response_model=TeacherResponse)
async def update_teacher(teacher_id: int, data: TeacherUpdate, db: Session = Depends(get_db)):
return TeacherDAO.update(db, teacher_id, data)
# 逻辑删除老师
@router.post("/delete/{teacher_id}", response_model=TeacherResponse)
async def delete_teacher(teacher_id: int, db: Session = Depends(get_db)):
return TeacherDAO.delete(db, teacher_id)
+31
View File
@@ -0,0 +1,31 @@
#这是学生就业系统的子路由
from fastapi import APIRouter, Depends, HTTPException, Query
from sqlalchemy.orm import Session
from dao.work_dao import WorkDao
from database import get_db
from scheme.works import StudentWorkCreate,StudentWorkCreate1,StudentWorks
router = APIRouter()
#这是添加学生就业信息接口
@router.post("/create")
def create_student(student: StudentWorkCreate,db:Session=Depends(get_db)):
u1 = WorkDao.add_s_w(db,student)
return u1
#这是获取学生就业信息接口
@router.post("/post")
def get_student(student1: StudentWorkCreate1,db:Session=Depends(get_db)):
u2 = WorkDao.get_s_w(db,student1)
return u2
#这是更新学生就业信息接口
@router.put("/put")
def put_student(student2: StudentWorks,db:Session=Depends(get_db)):
u3 = WorkDao.update_s_w(db,student2)
return u3
#这是删除学生就业信息接口
@router.delete("/delete")
def delete_student(user_id:int=Query(...,ge=1,le=10000,description="填入合法学生编号"),db:Session=Depends(get_db)):
u4 = WorkDao.delete_s_w(db,user_id)
return u4