12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- from fastapi import APIRouter, Path, Depends, Query, Body
- from sqlalchemy.ext.asyncio import AsyncSession
- from starlette.background import BackgroundTasks
- from bgtask.tasks import bgtask_delete_related_object
- from crud.school import crud_grade, crud_school
- from models.user import Admin
- from schemas.base import ReturnField
- from schemas.school.school import GradeDetail, GradeItemList, NewGrade, UpdateGrade
- from utils.depends import get_async_db, get_current_user
- router = APIRouter()
- # 学校年级列表
- @router.get("/grades",
- response_model=GradeItemList,
- response_model_exclude_none=True,
- summary="年级列表")
- async def get_grades(sid: int = Query(..., description="学校ID"),
- db: AsyncSession = Depends(get_async_db),
- res: ReturnField = Query("", description="返回字段,取值:id,name"),
- current_user: Admin = Depends(get_current_user)):
- total, items = await crud_grade.find_all(db, filters={"school_id": sid}, return_fields=res)
- return {"total": total, "data": items}
- @router.post("/grades",
- response_model=GradeDetail,
- response_model_exclude_none=True,
- summary="创建年级")
- async def create_grade(info: NewGrade,
- db: AsyncSession = Depends(get_async_db),
- current_user: Admin = Depends(get_current_user)):
- # 判断学校是否存在
- existed = await crud_school.count(db, filters={"id": info.school_id})
- if not existed:
- return {"errcode": 404, "mess": "学校不存在!"}
- # 判断年级是否重名
- existed = await crud_grade.count(db, filters={"school_id": info.school_id, "name": info.name})
- if existed:
- return {"errcode": 400, "mess": "存在同名年级!"}
- else:
- grade = await crud_grade.insert_one(db, info)
- return {"data": grade}
- @router.put("/grades/{gid}",
- response_model=GradeDetail,
- response_model_exclude_none=True,
- summary="更新年级")
- async def update_grade(gid: int = Path(..., description="年级ID"),
- info: UpdateGrade = Body(..., description="年级信息"),
- db: AsyncSession = Depends(get_async_db),
- current_user: Admin = Depends(get_current_user)):
- # 判断提交参数
- info_dict = info.dict(exclude_none=True)
- if not info_dict:
- return {"errcode": 400, "mess": "提交参数为空!"}
- # 判断年级是否存在
- db_obj = await crud_grade.find_one(db, filters={"id": gid})
- if not db_obj:
- return {"errcode": 404, "mess": "年级不存在!"}
- grade = await crud_grade.update(db, db_obj, info)
- return {"data": grade}
- # 删除年级
- @router.delete("/grades/{gid}",
- response_model=GradeDetail,
- response_model_exclude_none=True,
- summary="删除年级")
- async def delete_grade(bgtask: BackgroundTasks,
- sid: int = Query(..., description="学校ID"),
- gid: int = Path(..., description="年级ID"),
- db: AsyncSession = Depends(get_async_db),
- current_user: Admin = Depends(get_current_user)):
- existed = await crud_grade.count(db, filters={"school_id": sid, "id": gid})
- if not existed:
- return {"errcode": 404, "mess": "年级不存在!"}
- else:
- await crud_grade.delete(db, obj_id=id)
- bgtask.add_task(bgtask_delete_related_object, gid=gid)
- return {"data": None}
|