Files
KCGL/inventory-backend/app/api/v1/user.py

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='系统', action='修改偏好配置')
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