You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

88 lines
2.3 KiB

# -*- coding:utf-8 -*-
"""
@Created on : 2023/7/26 9:58
@Author: hxl
@Des: 科室管理
"""
from fastapi import APIRouter, Query
from pydantic import BaseModel
from helper import respond_to
from models import Department, User
router = APIRouter(prefix='/department')
class CreateDepartment(BaseModel):
name: str
code: str | None
phone: str | None
comment: str | None
class UpdateDepartment(BaseModel):
name: str | None
code: str | None
phone: str | None
comment: str | None
@router.post('', summary='新增科室')
async def create_dep(post: CreateDepartment):
"""
新增科室
:param post: CreateDepartment
:return:
"""
get_department = await Department.get_or_none(name=post.name)
if get_department:
return respond_to(code=400, desc=f'科室{post.name}已经存在')
await Department.create(**post.dict())
return respond_to(desc=f"科室{post.name}创建成功")
@router.delete('/{department_id}', summary='删除科室')
async def del_dep(department_id: str):
"""
删除科室
:param department_id: str
:return:
"""
users = await User.filter(department_id=department_id)
if users:
return respond_to(code=400, desc='科室下有用户,不能删除')
await Department.filter(id=department_id).delete()
return respond_to(desc='删除成功')
@router.put('/{department_id}', summary='编辑科室')
async def update_dep(department_id: str, post: UpdateDepartment):
"""
编辑科室
:param department_id: str
:param post: UpdateDepartment
:return:
"""
department_check = await Department.get_or_none(id=department_id)
if not department_check:
return respond_to(code=400, desc='科室不存在')
if department_check.name != post.name:
check_name = await Department.get_or_none(name=post.name)
if check_name:
return respond_to(code=400, desc=f'科室{post.name}已经存在')
data = post.dict()
await Department.filter(pk=department_id).update(**data)
return respond_to(desc='更新成功')
@router.get('', summary='科室列表')
async def index(name: str = Query(None)):
"""
科室列表
:param
:return:
"""
data = await Department.all()
return respond_to(data=data)