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.

91 lines
2.6 KiB

from fastapi import APIRouter
from fastapi.responses import JSONResponse
from fastapi.encoders import jsonable_encoder
import os
# from endpoints.cab import cabinet, plane
from models import User
from starlette.requests import Request
from pydantic import BaseModel, constr
from helper.utils import encrypt_md5
from conf import setting
router = APIRouter(prefix='/api/test')
# router.include_router(plane.router, tags=["柜体管理"])
class UserEdit(BaseModel):
username: str
name: str
role_id: int
# department_id: str | None
# sex: int | None
phone: str | None
password: str
# email: str | None
locked: bool | None
class UpdatePassword(BaseModel):
password: str
class SignUp(BaseModel):
username: constr(strip_whitespace=True)
name: str
# department_id: str | None
role_id: int
# sex: int | None
phone: str | None
# email: str | None
# locked: bool
drawers: list = []
def respond_to(code: int = 200, desc: str = '成功', data=None):
if data is None:
return JSONResponse(content={"code": code, "desc": desc})
else:
return JSONResponse(content={"code": code, "desc": desc, "data": jsonable_encoder(data)})
@router.get("/")
def read_root():
return {"Hello": "World"}
@router.post('/add', summary='创建账号')
async def create(request: Request, model: SignUp):
if len(model.username) < 4:
return respond_to(code=400, desc='用户名长度不能小于4位')
user = await User.get_or_none(username=model.username)
if user:
return respond_to(code=409, desc='账号已注册')
password_digest = encrypt_md5(setting.REGISTER_INIT_PASSWORD)
user = await User.create(**model.dict(), password_digest=password_digest)
return respond_to(data=user.as_json())
@router.get('/user/{id}', summary='获取个人信息')
async def show(id: str):
user = await User.get(id=id)
result = user.as_json()
return respond_to(data=result)
@router.get("/cabinet_files/{cabinet_id}", summary='获取下位机日志列表')
async def read_cabinet_files(cabinet_id: str, page_no: int = 1, page_size: int = 10):
"""
获取下位机日志列表
:return:
"""
# 获取static/logs目录下所有子目录的名称
pid_dir = f"static/logs/{cabinet_id}"
if not os.path.exists(pid_dir):
return respond_to(code=400, desc=f'没有找到目录')
result = os.listdir(pid_dir)
sorted_logs = sorted(result, reverse=True)
count = len(sorted_logs)
sorted_logs = sorted_logs[(page_no-1)*page_size:page_no*page_size]
return respond_to(data={"count": count, "data": sorted_logs})