49 lines
1.8 KiB
Plaintext
49 lines
1.8 KiB
Plaintext
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 |