pzx-web-api/app/api/v1/user.py

70 lines
2.3 KiB
Python

from apiflask import APIBlueprint
from flask import session
from app import rpc
from app.api.v1.exception.api import ImageNotFound
from app.api.v1.exception.user import UserInfoNotFound, UserInfoError
from app.api.v1.schema.user import UserInfoIn, UserInfoOut
from app.util.auth import login_required
user = APIBlueprint('user', __name__)
@user.post('/info')
@user.doc(summary='设置用户信息', description='设置用户信息')
@user.input(UserInfoIn, location='json')
@login_required
def set_user_info(json_data):
try:
rpc.admin.set_user_info(session['user_id'],
json_data.get('nickname', None))
except Exception as e:
raise UserInfoError(extra_data={'error_docs': str(e)})
try:
rpc.body_record.set_body_info(session['user_id'],
height=json_data.get('height', None),
is_hidden_weight=json_data.get('is_hidden_weight', None),)
except Exception as e:
raise UserInfoError(extra_data={'error_docs': str(e)})
return {'msg': 'setting user info success'}
@user.get('/info')
@user.doc(summary='查询用户信息', description='查询用户信息')
@user.output(UserInfoOut)
@login_required
def get_user_info():
result = {}
try:
user_dict = rpc.admin.get_user_info(session['user_id'])
except Exception as e:
raise UserInfoNotFound(extra_data={'error_docs': str(e)})
try:
presign_url = rpc.storage.get_presign_url(user_dict['avatar_id'],
'bodyrecord',
bucket='bodyrecord')
user_dict['avatar_url'] = presign_url
except Exception as e:
raise ImageNotFound(extra_data={'error_docs': str(e)})
try:
body_info_dict = rpc.body_record.get_body_info(session['user_id'])
except Exception as e:
raise UserInfoNotFound(extra_data={'error_docs': str(e)})
result.update(user_dict)
if body_info_dict:
result['height'] = body_info_dict.get('height', None)
if body_info_dict.get('is_hidden_weight', None):
result['is_hidden_weight'] = True
else:
result['is_hidden_weight'] = False
else:
result['height'] = None
result['is_hidden_weight'] = False
return result