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})