def _escape(value): if value is None: return None return str(value).replace("'", "''") async def model_management_pin_top(ns={}): """ 置顶:将模型排到全局列表最前(sort_order 设为当前最小值 - 1) 必填参数: id (int|str) 模型主键 """ model_id = ns.get('id') if not model_id: return {'status': False, 'msg': 'id is required'} db = DBPools() async with db.sqlorContext('kboss') as sor: try: current_sql = """ SELECT id, sort_order FROM model_management WHERE id = '%s' LIMIT 1; """ % _escape(model_id) current = await sor.sqlExe(current_sql, {}) if not current: return {'status': False, 'msg': 'model not found'} min_sql = "SELECT MIN(sort_order) AS min_order FROM model_management;" min_order = int((await sor.sqlExe(min_sql, {}))[0].get('min_order') or 0) current_order = int(current[0].get('sort_order') or 0) if current_order <= min_order: return {'status': True, 'msg': 'already at top', 'data': {'sort_order': current_order}} new_order = min_order - 1 update_sql = """ UPDATE model_management SET sort_order = %s WHERE id = '%s'; """ % (new_order, _escape(model_id)) await sor.sqlExe(update_sql, {}) return { 'status': True, 'msg': 'pin to top success', 'data': {'id': model_id, 'sort_order': new_order}, } except Exception as e: await sor.rollback() return {'status': False, 'msg': 'pin to top failed, %s' % str(e)} ret = await model_management_pin_top(params_kw) return ret