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