66 lines
2.1 KiB
Python
66 lines
2.1 KiB
Python
from flask import Blueprint, request, jsonify, current_app
|
|
from app.models.system import SysUser
|
|
from app.extensions import db
|
|
from flask_jwt_extended import jwt_required, get_jwt_identity
|
|
from app.utils.decorators import audit_log
|
|
|
|
user_bp = Blueprint('user', __name__)
|
|
|
|
|
|
# ==============================================================================
|
|
# 用户偏好配置 API
|
|
# ==============================================================================
|
|
|
|
@user_bp.route('/preferences', methods=['GET'])
|
|
@jwt_required()
|
|
def get_preferences():
|
|
"""
|
|
读取当前用户的 preferences 字段
|
|
GET /api/v1/user/preferences
|
|
"""
|
|
try:
|
|
user_id = get_jwt_identity()
|
|
user = SysUser.query.get(user_id)
|
|
if not user:
|
|
return jsonify({'code': 404, 'msg': '用户不存在'}), 404
|
|
return jsonify({
|
|
'code': 200,
|
|
'msg': 'success',
|
|
'data': user.preferences or {}
|
|
})
|
|
except Exception as e:
|
|
current_app.logger.error(f'读取用户偏好失败: {str(e)}')
|
|
return jsonify({'code': 500, 'msg': f'读取失败: {str(e)}'}), 500
|
|
|
|
|
|
@user_bp.route('/preferences', methods=['PUT'])
|
|
@jwt_required()
|
|
@audit_log(module_name='系统', action_type='修改偏好配置')
|
|
def save_preferences():
|
|
"""
|
|
保存/更新当前用户的 preferences 字段
|
|
PUT /api/v1/user/preferences
|
|
入参: 任意 JSON 字典
|
|
"""
|
|
try:
|
|
user_id = get_jwt_identity()
|
|
user = SysUser.query.get(user_id)
|
|
if not user:
|
|
return jsonify({'code': 404, 'msg': '用户不存在'}), 404
|
|
|
|
new_prefs = request.get_json()
|
|
if new_prefs is None or not isinstance(new_prefs, dict):
|
|
return jsonify({'code': 400, 'msg': '参数必须是 JSON 对象'}), 400
|
|
|
|
user.preferences = new_prefs
|
|
db.session.commit()
|
|
return jsonify({
|
|
'code': 200,
|
|
'msg': '保存成功',
|
|
'data': user.preferences
|
|
})
|
|
except Exception as e:
|
|
db.session.rollback()
|
|
current_app.logger.error(f'保存用户偏好失败: {str(e)}')
|
|
return jsonify({'code': 500, 'msg': f'保存失败: {str(e)}'}), 500
|