成绩模块+课程模块

This commit is contained in:
2026-09-22 17:36:49 +08:00
parent 0cb1d8e196
commit ca3cc80a0d
9 changed files with 361 additions and 0 deletions
+29
View File
@@ -0,0 +1,29 @@
from fastapi import APIRouter, Depends, HTTPException
from schema.course_request import CourseRequest, CourseResponse
from database import get_db
from dao.course_dao import (
add_course_dao, get_all_courses_dao, get_course_by_id_dao
)
course_api = APIRouter()
@course_api.post('', response_model=CourseResponse, summary='添加课程')
def add_course(course: CourseRequest, db=Depends(get_db)):
d = course.model_dump()
r = add_course_dao(o=d, db=db)
if not r:
raise HTTPException(status_code=500, detail='添加失败!')
return CourseResponse(totals=1, data=d)
@course_api.get('/{course_id}', summary='按编号查课程')
def get_course(course_id: str, db=Depends(get_db)):
c = get_course_by_id_dao(course_id=course_id, db=db)
if not c:
raise HTTPException(status_code=404, detail='课程不存在')
return {
'course_id': c.course_id,
'course_name': c.course_name,
'teacher_id': c.teacher_id,
}
+70
View File
@@ -0,0 +1,70 @@
from fastapi import APIRouter, Depends, HTTPException
from schema.score_request import ScoreRequest, ScoreUpdateRequest, ScoreResponse
from database import get_db
from dao.score_dao import (
calc_level, calc_pass,
add_score_dao, update_score_dao, delete_score_dao, get_scores_dao
)
score_api = APIRouter()
# ========== 1. 添加成绩(按考核序次录入) ==========
@score_api.post('', response_model=ScoreResponse, summary='添加成绩')
def add_score(score: ScoreRequest, db=Depends(get_db)):
d = score.model_dump()
d['score_level'] = calc_level(d['score']) # ← 调 DAO 的工具函数
d['is_pass'] = calc_pass(d['score'])
r = add_score_dao(o=d, db=db)
if not r:
raise HTTPException(
status_code=500,
detail='添加失败!'
)
return ScoreResponse(totals=1, data=d)
# ========== 2. 查询成绩(动态条件 + 分页) ==========
@score_api.get('', summary='查询成绩(支持多条件+分页)')
def get_scores(
score_id: int = None,
student_id: str = None,
course_id: str = None,
teacher_id: str = None,
exam_order: int = None,
page: int = 1,
page_size: int = 10,
db=Depends(get_db)
):
r = get_scores_dao(
score_id=score_id, student_id=student_id, course_id=course_id,
teacher_id=teacher_id, exam_order=exam_order,
page=page, page_size=page_size, db=db
)
if r:
return r
raise HTTPException(status_code=404, detail='成绩不存在!')
# ========== 3. 修改成绩 ==========
@score_api.put('/{score_id}', summary='修改成绩')
def update_score(score_id: int, score: ScoreUpdateRequest, db=Depends(get_db)):
d = score.model_dump(exclude_unset=True)
if 'score' in d:
d['score_level'] = calc_level(d['score'])
d['is_pass'] = calc_pass(d['score'])
r = update_score_dao(score_id=score_id, update_data=d, db=db)
if not r:
raise HTTPException(status_code=500, detail='没有更新!')
return {'code': 200, 'totals': r, 'detail': '更新成功'}
# ========== 4. 删除成绩(逻辑删除) ==========
@score_api.delete('/{score_id}', summary='删除成绩(逻辑删除)')
def delete_score(score_id: int, db=Depends(get_db)):
r = delete_score_dao(score_id=score_id, db=db)
if not r:
raise HTTPException(status_code=500, detail='删除异常,稍后操作!')
return {'code': 200, 'totals': r, 'detail': '删除成功'}