fix: align all downapikey operations to actual table schema (id,dappid,userid,apikey,enabled_date,expired_date)

This commit is contained in:
yumoqing 2026-05-13 11:44:53 +08:00
parent 5c527c1bb2
commit e6d9f02dd4

View File

@ -156,20 +156,20 @@ def return_success(data):
} }
async def get_orgid_by_dorgid(sor, dappid, dorgid): async def get_orgid_by_dorgid(sor, dappid, dorgid):
d = { """检查外部机构ID(dorgid)在本系统中是否已存在。
'dappid':dappid,
'dorgid':dorgid dorgid 即为本系统 orgid直接检查 organization
} """
recs = await sor.R('downapikey', d) recs = await sor.R('organization', {'id': dorgid})
if len(recs) < 1: if len(recs) < 1:
return None return None
return recs[0].orgid return dorgid
async def check_duserid_exists(sor, dappid, dorgid, duserid): async def check_duserid_exists(sor, dappid, duserid):
"""检查用户(dappid+duserid)是否已存在apikey"""
d = { d = {
'dappid': dappid, 'dappid': dappid,
'duserid': duserid, 'userid': duserid,
'dorgid': dorgid
} }
recs = await sor.R('downapikey', d) recs = await sor.R('downapikey', d)
if len(recs): if len(recs):
@ -188,18 +188,19 @@ async def add_user(sor, user):
await create_user(sor, user, roles=user.get('roles')) await create_user(sor, user, roles=user.get('roles'))
return id return id
async def add_apikey(sor, dappid, dorgid, duserid, orgid, userid): async def add_apikey(sor, dappid, userid):
"""为用户创建apikey。
downapikey表字段: id, dappid, userid, apikey, enabled_date, expired_date
duserid = 本系统 userid直接存入 userid 字段
"""
apikey = getID() apikey = getID()
d = { d = {
'id': getID(), 'id': getID(),
'dappid': dappid, 'dappid': dappid,
'dorgid': dorgid,
'duserid': duserid,
'orgid': orgid,
'userid': userid, 'userid': userid,
'apikey': apikey, 'apikey': apikey,
'enabled': '1', 'enabled_date': curDateString(),
'created_at': curDateString(),
'expired_date': '9999-12-31' 'expired_date': '9999-12-31'
} }
await sor.C('downapikey', d) await sor.C('downapikey', d)
@ -219,45 +220,32 @@ async def create_user_apikey(sor, dappid, user_id, user_orgid, **kwargs):
dict: {'status': 'success'|'error', 'apikey': str, 'message': str} dict: {'status': 'success'|'error', 'apikey': str, 'message': str}
""" """
try: try:
# 检查apikey是否已存在 # downapikey表实际字段: id, dappid, userid, apikey, enabled_date, expired_date
# 按(dappid, userid)唯一性查询
existing = await sor.R('downapikey', { existing = await sor.R('downapikey', {
'dappid': dappid, 'dappid': dappid,
'duserid': user_id, 'userid': user_id,
'dorgid': user_orgid
}) })
if existing: if existing:
# 验证关联的 users 记录是否仍然存在 # 返回现有apikey
user_records = await sor.R('users', {'id': existing[0].userid}) f = get_serverenv('password_decode')
if not user_records: apikey = f(existing[0].apikey)
# downapikey 有记录但 users 表无对应用户(脏数据),清理后重新创建 return {
debug(f'create_user_apikey: downapikey exists but user {existing[0].userid} not found, recreating') 'status': 'success',
await sor.D('downapikey', {'id': existing[0].id}) 'apikey': apikey,
else: 'user_id': user_id,
# 返回现有apikey 'message': '用户apikey已存在'
f = get_serverenv('password_decode') }
apikey = f(existing[0].apikey)
return {
'status': 'success',
'apikey': apikey,
'user_id': user_id,
'message': '用户apikey已存在'
}
# 创建新apikey # 创建新apikey
apikey_id = getID()
apikey_value = getID() apikey_value = getID()
ns = { ns = {
'id': apikey_id, 'id': getID(),
'dappid': dappid, 'dappid': dappid,
'dorgid': user_orgid,
'duserid': user_id,
'orgid': user_orgid,
'userid': user_id, 'userid': user_id,
'apikey': password_encode(apikey_value), 'apikey': password_encode(apikey_value),
'enabled': '1', 'enabled_date': curDateString(),
'created_at': curDateString(),
'expired_date': '9999-12-31' 'expired_date': '9999-12-31'
} }
@ -303,13 +291,13 @@ async def sync_user(request, params_kw, *args, **kw):
return return_error(-2) return return_error(-2)
u['orgid'] = o['id'] u['orgid'] = o['id']
u['roles'] = roles u['roles'] = roles
exists = check_duserid_exists(sor, dappid, dorgid, duserid) exists = check_duserid_exists(sor, dappid, duserid)
if exists: if exists:
return return_error(-1) return return_error(-1)
userid = await add_user(sor, u) userid = await add_user(sor, u)
if userid is None: if userid is None:
return return_error(-3) return return_error(-3)
apikey = await add_apikey(sor, dappid, orgid, userid, u) apikey = await add_apikey(sor, dappid, userid)
if apikey is None: if apikey is None:
return return_error(-4) return return_error(-4)
ret_users.append({ ret_users.append({