79 lines
3.2 KiB
Python
79 lines
3.2 KiB
Python
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 schemas.class_request import ClassCreate,ClassResponse,ClassUpdate
|
||
|
|
from database import get_db
|
||
|
|
from typing import Optional
|
||
|
|
from sqlalchemy.orm import Session
|
||
|
|
class_app = APIRouter()
|
||
|
|
@class_app.post('',response_model=ClassResponse)
|
||
|
|
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_app.put('{id}')
|
||
|
|
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_app.get('')
|
||
|
|
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_no=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_app.delete('/{id}') #软删除
|
||
|
|
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_app.delete('{id}/hard')
|
||
|
|
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':'物理删除成功'}
|