diff --git a/api/class_api.py b/api/class_api.py new file mode 100644 index 0000000..c16e12f --- /dev/null +++ b/api/class_api.py @@ -0,0 +1,78 @@ +from fastapi import APIRouter,Depends,HTTPException,Query +from dao.class_dao import add_class_dao, update_class_dao, delete_class_dao, hard_delete_class_dao,class_no_exist,get_class_list_dao,get_class_by_id_dao +from schema.class_schema import ClassCreate,ClassResponse,ClassUpdate +from database import get_db +from typing import Optional +from sqlalchemy.orm import Session +class_router = APIRouter() +@class_router.post('',response_model=ClassResponse,summary='添加班级信息') +def add_class(c:ClassCreate,db=Depends(get_db)): + if class_no_exist(c.class_id,db): + raise HTTPException(status_code=404,detail='该编号已经存在') + ok,result = add_class_dao(c.model_dump(),db) + if not ok: + raise HTTPException(status_code=500,detail='服务器繁忙或指定的老师不存在') + return ClassResponse(totals=1,data=result) +@class_router.put('/{id}',summary='更新班级信息') +def update_class(id:int,c:ClassUpdate,db=Depends(get_db)): + d = c.model_dump() + r = update_class_dao(id=id ,update_data=d,db=db) + if not r: + raise HTTPException(status_code=500,detail='更新失败') + return{'code':200,'total':1,'detail':'更新成功'} +''' +@class_app.get('') +def get_class(id:int,db=Depends(get_db),page:int=1,page_size:int=10): + rows = get_class_dao(id=id,db=db,page=page,page_size=page_size) + if rows: + return rows + raise HTTPException(status_code=404,detail='该班级不存在') +''' +@class_router.get('',summary='查询班级信息') +def get_classes( + id: Optional[int] = Query(None, description="班级ID"), + class_id: Optional[str] = Query(None, description="班级编号"), + class_name: Optional[str] = Query(None, description="班级名称(支持模糊搜索)"), + ht_id: Optional[int] = Query(None, description="班主任ID"), + t_id: Optional[int] = Query(None, description="教师ID"), + page: int = Query(1, ge=1, description="页码"), + page_size: int = Query(10, ge=1, le=100, description="每页条数"), + db: Session = Depends(get_db) +): + # 如果明确传了 id,当作单条查询处理 + if id is not None: + single_class = get_class_by_id_dao(id=id, db=db) + if not single_class: + raise HTTPException(status_code=404, detail="该班级不存在") + return single_class + + # 多条件列表查询 + total, items = get_class_list_dao( + db=db, + class_id=class_id, + class_name=class_name, + ht_id=ht_id, + t_id=t_id, + page=page, + page_size=page_size + ) + + return { + "total": total, + "page": page, + "page_size": page_size, + "items": items + } +@class_router.delete('/{id}',summary='软删除') #软删除 +def delete_class(id:int,db=Depends(get_db)): + rows = delete_class_dao(id=id,db=db) + if not rows: + raise HTTPException(status_code=404,detail='该班级不存在或已删除') + return{'code':200,'total':rows,'detail':'删除成功'} + +@class_router.delete('{id}/hard',summary='删除班级信息') +def hard_delete_class(id:int,db=Depends(get_db)): + rows = hard_delete_class_dao(id=id,db=db) + if not rows: + raise HTTPException(status_code=404,detail='该班级不存在') + return{'code':200,'total':rows,'detail':'物理删除成功'} diff --git a/api/epy_api.py b/api/epy_api.py new file mode 100644 index 0000000..57186f4 --- /dev/null +++ b/api/epy_api.py @@ -0,0 +1,35 @@ +from fastapi import APIRouter,Depends,HTTPException +from database import * +from schema.epy_schema import EmploymentRequest +from dao.epy_dao import get_employment_dao,wq_employment_dao,upd_employment_dao,del_employment_dao +epy_router = APIRouter() + + +@epy_router.get('',summary='查询就业信息') +def get_employment(stu_id:str,company:str,salary:int,db=Depends(get_db)): # get变动 + try: + rows = get_employment_dao(db, stu_id, company, salary) + if not rows: # dao层返回的是q.() 是列表 + return {'code':404,'detail':'数据不存在','total':[]} # 数据不存在返回报错信息 + except Exception as e: + raise HTTPException(status_code=500, detail=f'查询失败:{str(e)}') + return {'code':200,'detail':'查询成功','date':[{'stu_id':i.stu_id,'company':i.company,'salary':i.salary} for i in rows]} + + +@epy_router.post('',summary='新增就业信息') +def add_employment(e:EmploymentRequest,db=Depends(get_db)): + d= e.model_dump() + r = wq_employment_dao(d,db) + return {'code':200,'detail':'添加成功!','total':r} +# +# +@epy_router.put('',summary='更新就业信息') +def update_employment(e:EmploymentRequest,db=Depends(get_db)): + e1 = e.model_dump() + r = upd_employment_dao(e1,db) + return {'code':200,'msg':'更新成功','total':r} +# +@epy_router.delete('',summary='删除就业信息') +def delete_employment(stu_id:str,db=Depends(get_db)): + r =del_employment_dao(stu_id,db) + return {'code':200,'totals':r,'detail':'删除成功!'} diff --git a/api/sc_api.py b/api/sc_api.py new file mode 100644 index 0000000..87809c5 --- /dev/null +++ b/api/sc_api.py @@ -0,0 +1,45 @@ +from database import get_db +from fastapi import APIRouter,Depends +from dao.sc_dao import a,a1,a2,a3,a4,a5 +from schema.sc_schema import Test + +score_router=APIRouter() +@score_router.post('',summary='添加成绩信息') +def scores(s:Test,db=Depends(get_db)): + d = s.model_dump() + a(d,db) + return {'code':200,'detail':'添加成功!',} +@score_router.delete('',summary='删除成绩信息') +def scores1(stu_id:int,db=Depends(get_db)): + r = a1(stu_id,db) + if r==0: + return '没有该学生' + else: + return f'已删除学生编号为{stu_id}的学生' +@score_router.put('',summary='更新成绩信息') +def scores2(stu_id:int,exam_seq:int,s:Test,db=Depends(get_db)): + r=a2(stu_id,exam_seq,s,db) + if r!=0: + return '更新成功' + else: + return '没有该数据' +@score_router.get('',summary='通过学号查询成绩信息') +def scores3(stu_id:int,exam_seq:int,db=Depends(get_db)): + r=a3(stu_id,exam_seq,db) + try: + return {'成绩编号':r.id,'学生编号':r.stu_id,f'第{exam_seq}次成绩:':r.score,'创建日期':r.create_date,'更新日期':r.update_date} + except: + return '没有该学生' +@score_router.delete('/{stu_id}',summary='软删除') +def scores4(stu_id:int,exam_seq:int,db=Depends(get_db)): + r=a4(stu_id, exam_seq, db) + if r == 1: + return '没有该数据' + else: + return '已删除' +@score_router.get('/{stu_id}',summary='计算总分、平均分、最大值、最小值') +def scores5(stu_id:int,db=Depends(get_db)): + s,r,a=a5(stu_id,db) + + return f'总分:{s},平均分:{s/len(r)},最大值:{max(a)},最小值:{min(a)}' + diff --git a/api/stu_api.py b/api/stu_api.py new file mode 100644 index 0000000..a066079 --- /dev/null +++ b/api/stu_api.py @@ -0,0 +1,92 @@ +from fastapi import APIRouter, Depends, HTTPException +from sqlalchemy.orm import Session +from database import get_db +from dao.stu_dao import create_student, get_student_by_id, get_student_list, update_student, delete_student_logic +from schema.stu_schema import ( + StudentCreateRequest, + StudentUpdateRequest, + StudentQuery, + StudentResponse, + StudentPageResponse +) + +# 创建路由对象 API Router1 +stu_router = APIRouter() +@stu_router.post("", response_model=StudentResponse, summary="新增学生") +def add_student( + student_req: StudentCreateRequest, + db: Session = Depends(get_db) +): + db_stu = create_student(db, student_req) + if db_stu is None: + raise HTTPException(status_code=500, detail="新增学生失败,数据库异常") + return StudentResponse.model_validate(db_stu) + + +@stu_router.get("", response_model=StudentPageResponse, summary="根据学号姓名班级查询") +def get_student_page( + query: StudentQuery = Depends(), + db: Session = Depends(get_db) +): + total, db_stu_list = get_student_list( + db, + stu_id=query.stu_id, + stu_name=query.stu_name, + class_id=query.class_id, + page=query.page, + page_size=query.page_size + ) + if total == 0: + raise HTTPException(status_code=404, detail="没有找到符合条件的学生") + + item_list = [StudentResponse.model_validate(s) for s in db_stu_list] + + return StudentPageResponse( + total=total, + page=query.page, + page_size=query.page_size, + items=item_list + ) + + +@stu_router.get("/{stu_id}", response_model=StudentResponse, summary="根据学号查询") +def get_one_student( + stu_id: str, + db: Session = Depends(get_db) +): + db_stu = get_student_by_id(db, stu_id) + if db_stu is None: + raise HTTPException(status_code=404, detail="该学生不存在") + return StudentResponse.model_validate(db_stu) + +@stu_router.put("/{stu_id}", response_model=StudentResponse, summary="修改学生信息") +def edit_student( + stu_id: str, + update_req: StudentUpdateRequest, + db: Session = Depends(get_db) +): + exist = get_student_by_id(db, stu_id) + if exist is None: + raise HTTPException(status_code=404, detail="该学生不存在") + + db_stu = update_student(db, stu_id, update_req) + if db_stu is None: + raise HTTPException(status_code=500, detail="修改学生失败,数据库异常") + + return StudentResponse.model_validate(db_stu) + + +@stu_router.delete("/{stu_id}", response_model=StudentResponse, summary="删除学生信息") +def remove_student( + stu_id: str, + db: Session = Depends(get_db) +): + exist = get_student_by_id(db, stu_id) + if exist is None: + raise HTTPException(status_code=404, detail="该学生不存在") + + db_stu = delete_student_logic(db, stu_id) + if db_stu is None: + raise HTTPException(status_code=500, detail="删除学生失败,数据库异常") + + return StudentResponse.model_validate(db_stu) diff --git a/api/th_api.py b/api/th_api.py new file mode 100644 index 0000000..48f0b74 --- /dev/null +++ b/api/th_api.py @@ -0,0 +1,59 @@ +from fastapi import APIRouter,Depends,UploadFile,File,Query +from dao.th_dao import insert_teachers_dao,update_teachers_dao,delete_teachers_dao,get_teachers_limit_dao,get_teachers_name_dao +from schema.th_schema import RequestModel, ResponseModel +from database import get_db + +t_router = APIRouter() + +@t_router.get("",summary='分页查询教师接口') +def get_teachers(p:int=Query(default=0,ge=0,description='页码,0表示查询全部'), + n:int=Query(default=0,ge=0,description='每页条数,0表示查询全部'), + db=Depends(get_db)): + db_teachers = get_teachers_limit_dao(p,n,db) + return ResponseModel(data=db_teachers,total=len(db_teachers)) + +@t_router.get("/{name}",summary='通过名称查询教师接口') +def get_name_teachers(name:str,db=Depends(get_db)): + db_teachers = get_teachers_name_dao(name,db) + return ResponseModel(data=db_teachers,total=len(db_teachers)) + +@t_router.post("",summary='新增教师接口') +def insert_teachers(req:RequestModel,db=Depends(get_db)): + rq= req.model_dump() + n,m = insert_teachers_dao(rq,db) + # print('打印获取的值:',n,m) + return ResponseModel(total=n,msg=m) + +@t_router.put("",summary='更新教师接口') +def update_teachers(req:RequestModel,db=Depends(get_db)): + rq= req.model_dump() + n,m = update_teachers_dao(rq,db) + return ResponseModel(total=n,msg=m) + +@t_router.delete("/{t_id}",summary='删除教师接口') +def delete_teachers(t_id:int,db=Depends(get_db)): + n,m =delete_teachers_dao(t_id,db) + return ResponseModel(msg=m,total=n) + +@t_router.post('/files',summary='上传文件接口') +async def upload_files(f:UploadFile=File(),db=Depends(get_db)): + # print('UploadFile上传文件,读取该对象:',f) + text =await f.read() + l =text.decode('utf-8').split('\n') + lg = 0 + dt = [] + print('长度为',lg,l) + for i in l: + if '教师编号' in i: + continue + p = i.split() + if not p: # 判断如果p为[],跳过 + continue + l2 = ['t_id','t_name','t_age','t_phone','t_sex','class_id'] + d =dict() + for j in range(len(p)): + d[l2[j]]=p[j] + insert_teachers_dao(d,db) + lg = lg + 1 + dt.append(d) + return ResponseModel(msg='上传成功',total=lg,data=dt)