from fastapi import APIRouter, Depends, Request from pydantic import BaseModel from conf import setting from helper import login_required, respond_to from models import Terminal, Cabinet, Drawer, PlatformSecurity from models.archive import Archive router = APIRouter(prefix='/terminals') class TerminalEditModel(BaseModel): name: str | None title: str | None index_of_user: int | None login_count: int = 1 params: dict | None @router.get('', summary='获取终端信息') async def index(): terminal = await Terminal.get(id=setting.TERMINAL_ID).values() terminal['has_door'] = setting.HAS_DOOR terminal['send_all_board_id'] = setting.SEND_ALL_BOARD_ID terminal['has_balance'] = setting.HAS_BALANCE terminal['rfid_reverse'] = setting.RFID_REVERSE terminal['client_number'] = setting.CLIENT_NUMBER return respond_to(data=terminal) @router.put('/{id}', summary='修改终端信息', dependencies=[Depends(login_required)]) async def update(request: Request, id: str, model: TerminalEditModel): model_dict = model.dict() model_dict.pop("params") await Terminal.filter(id=id).update(**model_dict) # 大类参数保存 if request.state and request.state.archive_id and model.params: archive_obj = await Archive.get(id=request.state.archive_id) archive_obj.params = model.params await archive_obj.save() return respond_to() @router.get('/cabinets', summary='柜体及抽屉数据', dependencies=[Depends(login_required)]) async def index(): cabinets = await Cabinet.filter(terminal_id=setting.TERMINAL_ID).order_by('-created_at').only('id', 'label') data = [] for cabinet in cabinets: drawers = await Drawer.filter(cabinet_id=cabinet.id).order_by('rank').values('id', 'cabinet_id', 'label') data.append({'id': cabinet.id, 'label': cabinet.label, 'drawers': drawers}) return respond_to(data=data)